我几乎阅读了有关此主题的所有问题,但我仍然没有解决方案。
这是DLL函数:
int start(char* ipad, char* porta, char* codec, char* key_TX, char* key_RX){
FILE *myfile;
myfile = fopen("parameters.txt", "w");
fprintf(myfile, "Ip: %s\nPort: %d\nCodec: %s\nkeyTX: %s\nkeyRX: %s\n",ipad, porta, codec, key_TX, key_RX);
fclose(myfile);
//Do something with my parameters
return 0;
}
在我的C#应用程序中,我已经尝试传递string和StringBuilder参数失败。在this问题中建议使用PInvoke Interop Assistant并建议使用IntPtr。 这是我的包装C#类:
class MyPjMedia
{
[System.Runtime.InteropServices.DllImportAttribute("PjLibDLL.dll", EntryPoint = "start", CharSet = CharSet.Auto)]
private static extern int start( System.IntPtr ip,
System.IntPtr port,
System.IntPtr codec,
System.IntPtr key_TX,
System.IntPtr key_RX);
public static int StartPjMedia()
{
string url = "127.0.0.1";
string porta = "3700";
string codec = "SPEEX/8000/1";
string key_TX = "111111111122222222223333333333444444444455555555556666666666";
string key_RX = "111111111122222222223333333333444444444455555555556666666666";
IntPtr url_ptr = Marshal.StringToBSTR(url);
IntPtr porta_ptr = Marshal.StringToBSTR(porta);
IntPtr codec_ptr = Marshal.StringToBSTR(codec);
IntPtr key_TX_ptr = Marshal.StringToBSTR(key_TX);
IntPtr key_RX_ptr = Marshal.StringToBSTR(key_RX);
int result = start(url_ptr, porta_ptr, codec_ptr, key_TX_ptr, key_RX_ptr);
return result;
}
}
在所有情况下,结果始终相同:parameters.txt
Ip: 127.0.0.1
Porta: 3700
Codec: SPEEX/8000/1L
keyTX: 111111111122222222223333333333444444444455555555556666666666ñ
keyRX: 111111111122222222223333333333444444444455555555556666666666°
这是一个移动应用程序,所以我使用的是.NET Compact Framework 3.5。
有什么建议吗?谢谢你的时间。