Chào buổi chiều,PInvoke Mất cân bằng ngăn xếp
Tôi đã làm việc trên một dll có thể sử dụng CORBA để giao tiếp với ứng dụng được mạng biết. Mã hoạt động tốt nếu tôi chạy nó như là một ứng dụng giao diện điều khiển C++. Tuy nhiên, tôi đã bị mắc kẹt khi xuất các phương thức như một dll. Các phương thức dường như xuất tốt, và nếu tôi gọi một phương thức không có tham số thì nó hoạt động như mong đợi. Tôi treo lên trên đi qua một chuỗi C# đến một phương pháp C + +.
C++ phương pháp tiêu đề của tôi trông như thế này:
bool __declspec(dllexport) SpiceStart(char* installPath)
C# nhập khẩu DLL Mã của tôi là như sau:
[DllImportAttribute("SchemSipc.dll", CharSet=CharSet.Ansi)]
private static extern bool SpiceStart(string installPath);
Tôi gọi phương thức như vậy:
bool success = SpiceStart(@"c:\sedatools");
Các cuộc gọi đến SpiceStart ném ngoại lệ "PInvokeStackImbalance", có khả năng là do chữ ký PInvoke được quản lý không khớp với chữ ký mục tiêu không được quản lý. "
Có ai có bất kỳ đề xuất nào không? Nếu tôi loại bỏ các char * và chuỗi từ các tham số, sau đó phương pháp chạy tốt. Tuy nhiên, tôi muốn có thể vượt qua đường dẫn cài đặt của ứng dụng vào dll từ C#.
Cảm ơn trước,
Giawa
1. Hoặc chỉ định quy ước gọi trong DllImportAttribute. –
Hoàn hảo - Đã thực hiện công việc! Cảm ơn – Giawa