我在本机DLL中有以下函数头:
unsigned char* Version_String()
Run Code Online (Sandbox Code Playgroud)
我试图从C#项目调用它,我尝试了以下调用(在此处的其他类似问题中找到):
[DllImport("BSL430.dll", CharSet=CharSet.Ansi)]
public extern static UIntPtr Version_String();
Run Code Online (Sandbox Code Playgroud)
我一直得到以下异常:
尝试读取或写入受保护的内存.这通常表明其他内存已损坏.
下一个尝试是以下,我得到相同的例外:
[DllImport("BSL430.dll", CharSet=CharSet.Ansi)]
[return : MarshalAs(UnmanagedType.LPStr)]
public extern static string Version_String();
Run Code Online (Sandbox Code Playgroud)
我似乎无法解决这个问题.任何帮助将不胜感激!
编辑:
我不能在这里给出DLL代码,因为它属于NDA,但我调用的函数看起来像这样:
unsigned char versionString[50];
__declspec(dllexport) unsigned char* Version_String()
{
if(check_hardware_stuff())
{
strcpy((char *) versionString, "version_string_bla_bla");
versionString[5] = stuff;
}
else if (other_check())
{
//will return empty string, that should be filled with '\0'
}
else
{
strcpy( (char *) versionString, "ERROR" );
}
return versionString;
}
Run Code Online (Sandbox Code Playgroud)
我并不特别喜欢DLL实现,但我需要"按原样"使用它.无论我VersionString()对返回值做什么,每次尝试调用时都会抛出异常.