我的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 ++可重新分发而没有成功。你有什么建议吗?
谢谢
Davide
答案 0 :(得分:1)
我不知道您的功能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
参数也有同样的道理(如有必要)。