Tôi có một DLL được biên dịch trong Delphi 2007 và một ví dụ sử dụng nó trong dự án Delphi khác. Đây là một phần của mã:Gọi hàm delphi DLL từ C# Code
TErrorCallback = function(Msg:PChar):byte of object;
TSaveEventCallback = function (Line:PChar; HiCode:PChar; LoCode:PChar; MobileNo:PChar):byte of object;
function InitModule(ErrorCallback:TErrorCallback; SaveEventCallback :TSaveEventCallback; MainWindowHandle:THandle; Sock_Event:integer):byte; stdcall; external 'My.dll' name 'InitModule';
function DLLSocketEvent(var msg: TMessage): byte; stdcall; external 'My.dll' name 'DLLSocketEvent';
function InitObjList(Objs: array of PChar; NumObjs: byte; Name: PChar):byte; stdcall; external 'My.dll' name 'InitObjList';
Và đây là của tôi C# tương tự:
class Message
{
unsigned int msg;
int wParam;
int lParam;
int result;
};
delegate byte ErrorCallbackDelegate(string msg);
delegate byte SaveEventCallbackDelegate(string line, string hiCode, string loCode, string mobileNo);
[DllImport("My.dll")]
static extern byte InitModule(ErrorCallbackDelegate errorCallback, SaveEventCallbackDelegate saveEventCallback, IntPtr mainWindowsHandle, Int32 sockEvent);
[DllImport("My.dll")]
static extern byte DllSocketEvent(Message msg);
[DllImport("My.dll")]
static extern byte InitObjList(string[] objs, byte numObjs, string name);
Vấn đề là tôi đã cố gắng chỉ phương pháp InitModule và nó ném một ngoại lệ: Một cuộc gọi đến chức năng PInvoke 'ProjTest! ProjTest.MyClass :: InitModule' đã không cân bằng chồng. Điều này có thể do chữ ký PInvoke được quản lý không khớp với chữ ký đích không được quản lý. Kiểm tra rằng quy ước và tham số gọi của chữ ký PInvoke khớp với chữ ký không được quản lý đích.
Vui lòng giúp tôi với điều này. Làm thế nào tôi nên mô tả các chức năng DLL trong C#?
Tại sao bỏ phiếu xuống? –