簡體   English   中英

從C#傳遞到非托管dll后,參數不正確

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM