我的C#应用程序使用DLL导入标签调用外部DLL的C ++函数:
[DllImport("UserAuthentication.dll")]
private static extern int Validate(string pScrambeled, string szReadable, int flToUpper, string pstrErr);
int WINAPI ValidateAMOSBS(TCHAR *pScrambeled, TCHAR* szReadable, int flToUpper, TCHAR *pstrErr)
仅在一台服务器上,并且由IIS上托管的ASP.NET应用程序调用它时,它引发System.AccessViolationException。
我们尝试更改X86,X64编译并重新安装VC ++可重新分发而没有成功。你有什么建议吗?
谢谢,
戴维德
最佳答案
我不知道您的函数ValidateAMOSBS
是如何工作的。例如,如果最后一个参数TCHAR
是为错误消息分配的缓冲区,那么在导入中,您应该使用StringBuilder
类型:
[DllImport("UserAuthentication.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern int Validate(string pScrambeled, string szReadable, int flToUpper, StringBuilder pstrErr);
在调用
Validate
函数之前,应该为错误消息分配缓冲区:StringBuilder pstrErr= new StringBuilder(1000);
其他
TCHAR
参数也有相同的情况(如有必要)。