c#调用c++的dll,报出:
尝试读取或写入受保护的内存。这通常指示其他内存已损坏
c#调用c++的dll,报出:尝试读取或写入受保护的内存。这通常指示其他内存已损坏。
这个在C里面调用的方式是这样的:
int convertFun(wchar_t* docPath, wchar_t* Names, wchar_t* userName, int doc_level,CString operation=L"1")
我在C#里面定义如下:
[DllImport("ConvertLib.dll")]
static extern int convertFun(string docPath, string Names, string userName, int doc_level, string operation);
调用的代码:
convertFun("C:\\temp\\test.doc", "test", "guest",1, "1");
就发生“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”这个错误。
请各位帮忙看看?
c++
c#
dll
------解决方案--------------------MFC的CString在CLR中找不到等价的封送类型。你需要用C++.NET编写一个代理程序去调用,如果dll部分你无法修改的话。
------解决方案--------------------wchar_t*是unicode字符串,你要在c#指明字符编码类型,CString 这个参数很奇怪,按理在dll中不应该传送这种参数,而且还缺省是unicode,
------解决方案--------------------string一般用 stringBuilder
int 这些值类型,一般来说可以直接用,但是有时候要加ref
加试试ref 试试看行不行,也是以前遇到问题的经验,这个不是一定的
------解决方案--------------------首先确定dll本身没问题,用C/C++同样的数据先调用证实;
其次最后一个参数不是有默认值么,我看你传的也就是默认值。
------解决方案--------------------wchart*改用string[]试试看.
cstring应该直接传string就行了.
C#默认就是unicode
------解决方案--------------------应该是CString参数的问题吧,其他的参数应该都对的!