我正在尝试在我的c#项目中使用c ++ dll方法,其中一个方法工作正常但其他人正在给出错误:尝试读取或写入受保护的内存。这通常表明其他内存已损坏。 我不知道背后的原因。
答案 0 :(得分:0)
我的纯粹猜测:
在C ++中,long
与C#不同。如果你的C ++函数的参数是long
或unsigned long
,那么在C#中你应该分别使用int
和uint
。
我想这就是问题所在,因为对C#/long
使用client port
非常奇怪。你不需要64位数。如果签名不匹配,那么第三个搅拌参数response
在编组时会被破坏,而C ++端会在那里得到一个无效指针。
您当前的C#实现对应于此C ++签名:
long FK_SendResponse(string addr, long port, string response);
//<->
int64 FK_SendResponse(char const* addr, int64 port, char* response)
我猜你想要使用:
/*C#*/ int FK_SendResponse(string addr, int port, string response);
//<->
/*C++*/ long FK_SendResponse(char const* addr, long port, char* response)
或
/*C#*/ uint FK_SendResponse(string addr, uint port, string response);
//<->
/*C++*/ unsigned long FK_SendResponse(char* addr, unsigned long port, char* response)
// (or, the same speaking with WINAPI types)
/*C++*/ HRESULT FK_SendResponse(LPSTR addr, DWORD port, LPSTR response)