VC的DLL问题,帮忙看看,谢谢
extern "C" __declspec(dllexport) bool __stdcall UploadFileToFtp(LPCTSTR host,LPCTSTR localfile,LPCTSTR ftpfile,CString &lasterror);
上述代码是用VC写了个DLL的一个函数,通过C#调用这个DLL函数,大部分情况下都能正常执行,但是偶尔会出现下列错误
attempted to read or write protected memory
请问是什么原因,是不是 CString &lasterror 这个地方的原因?因为C#调用后会自动释放,我估计问题还是出在VC写的DLL参数部分,请帮忙分析一下谢谢
下面是C#写的代码:
[DllImport("ftpdll.dll", CharSet = CharSet.Ansi)]
public static extern bool UploadFileToFtp(string host, string localfile, string ftpfile,ref string lasterror);
string strerror = "";
if (UploadFileToFtp("x.x.x.x", "f:\\config.xml", "upload//config.xml1", ref strerror))
{
MessageBox.Show("成功");
}
else
{
MessageBox.Show(strerror);
}
[解决办法]
导出接口时,最好不要用“对象”;
即使是同一语言还会出问题,更何况跨语言?
因为给过去的是一块内存,对方要能正确解释和使用它, 否则至少一边会出错;
(同一语言,不同版本会出错,如vc6编的动态库,给vc 2008编的程序使用,某些类会出错,因为对象大小,内存对应位置数据含义不一样了)
[解决办法]
- C/C++ code
extern "C" __declspec(dllexport) bool __stdcall UploadFileToFtp(LPCTSTR host,LPCTSTR localfile,LPCTSTR ftpfile,LPSTR&lasterror);