PInvoke C#to C ++。字符串末尾的奇怪字符

时间:2012-06-26 14:39:28

标签: dll pinvoke intptr

我几乎阅读了有关此主题的所有问题,但我仍然没有解决方案。

这是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。

有什么建议吗?谢谢你的时间。

0 个答案:

没有答案