0

C関数を呼び出すC#アプリケーション(Windows 7 vs2010上のx86 .net 3.5)があります

.net 4 にアップグレードすると、次のメッセージが表示されました。

これは、マネージド PInvoke 署名がアンマネージド ターゲット シグネチャと一致しないことが原因である可能性があります。PInvoke シグネチャの呼び出し規約とパラメーターがターゲットのアンマネージド シグネチャと一致することを確認します。

C 署名:

BOOL ABC( UDF_HANDLE ハンドル, char* pQualifiedName ) //#define UDF_HANDLE void*

C#側:

    [SecuritySafeCritical]
    [DllImport(dllPath, CharSet = CharSet.Unicode, CallingConvention = CallingConvention.StdCall, ThrowOnUnmappableChar = true)]
    internal static extern int ABC(
        [In] IntPtr handle,
        [MarshalAs(UnmanagedType.LPStr)] string qualifiedName);

どんな助けでも感謝します。

4

2 に答える 2

0

C++ コードは cdecl 呼び出し規約を使用します。しかし、p/invoke で stdcall を指定しました。C# コードでそれを変更すると、2 つの宣言が一致します。

于 2013-09-30T06:29:17.207 に答える
0

ABC の最初のパラメーターを関数の最初のパラメーターと同じになるように再定義しました。

于 2013-01-17T19:35:58.447 に答える