[英]Parameters are incorrect after passing from C# to unmanaged dll
整天都在嘗試並搜索各種資源,但找不到解決方案。 我正在從c#調用導入的非托管dll函數。
C ++類如下所示:
class MyModule
{
public:
MYMODULEDLL_API int __cdecl Init(int);
...
在C#中定義如下:
[DllImport("MyModule_x64.dll", EntryPoint =
"?Init@MyModule@@QEAAHH@Z", CallingConvention = CallingConvention.Cdecl)]
public static extern int Init(int len);
像這樣調用:
Init(configFileName.Length);
我可以在調試器中看到正在調用dll中的適當功能,但是傳遞的參數已損壞,顯示的值與傳遞的值完全不同。 字符串參數也會發生這種情況。 無論如何,要解決托管代碼和非托管代碼之間的參數編組問題嗎?
您不能通過DLLImport或PINVOKE使用C ++類,因為它僅適用於C樣式函數。
如果要在C#中使用C ++類,則需要使用C ++ / CLI。 您可以在本機C ++中創建一個非托管dll,然后創建一個從本機dll調用方法的簡單C ++ / CLI包裝器。 之后,您可以簡單地將C ++ / CLI托管dll添加到項目中,並將其用作C#類,而無需任何DllImport和PINVOKE。 這將是一個非常靈活的解決方案,易於擴展。 在MSDN上,您可以找到有關如何使用C ++ / CLI的示例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.