我有一個C++ DLL,我試圖用C#接口。我無法訪問DLL源代碼,因此無法更改。其中一個我需要調用的方法中包含一個指向一個unsigned long:試圖將C++指針無符號長整型到一個C#ulong
int __stdcall Foo(FooHandle messageHandle, unsigned long* tag, char* part, char* value)
我已經創建了同樣的方法簽名測試DLL的項目,所以我可以嘗試算出這個,但我沒有成功能讓DLL改變指針所引用的無符號長整型的值,並在C#端返回該值。 C#的側聲明:
[DllImport("Foo.dll", EntryPoint = "Foo", CallingConvention = CallingConvention.StdCall)]
public static extern int Foo(int messageHandle, IntPtr tag, StringBuilder part, StringBuilder value);
當我做從C#中的呼叫,然後嘗試將IntPtr的轉換的Int32或Int64的,我得到一個零。我已經在這裏和網上搜索一般以及MSDN,似乎無法找到解釋如何做到這一點。我認爲char *將是最難的部分,但StringBuilder正常工作。
如何使用改變指針傳遞的無符號長整型值的C++ DLL?
任何幫助,將不勝感激。謝謝。
也許UIntPtr結構:http://msdn.microsoft.com/en-us/library/system.uintptr(v=VS.100)。 aspx可以在這裏提供一些幫助嗎? – Oxymoron
您沒有發佈如何獲取標記的簽名值的值。我會猜測代碼是錯誤的。當然你的簽名是不一樣的,標籤是一個基於你的C++簽名的無符號長引用。 –