1

ac# プログラムから Platform Invoke を使用して Newlands スキャナーにアクセスしようとしています。それは比較的簡単なはずです。P/Invoke をセットアップして呼び出します。

[DllImport("NLcpfw.dll", EntryPoint = "cpfw_open", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
        public static extern IntPtr cpfw_open(string pwStrPort,
                                                     string pwStrParam,
                                                     int nMode);

public static void CallFromHere(){
            IntPtr hDev = cpfw_open("udp", "", CPFW_OM_NORMAL);
            //GCHandle handle = GCHandle.Alloc(HNLCPFW, GCHandleType.Pinned);
            System.Diagnostics.Debug.Assert(hDev != null);
            NewlandInterface.cpfw_close(hDev);

    }

どういうわけかそれを拾っていません。BadImageFormatException が処理されませんでした 有効なマネージド アセンブリであることを確認してください アセンブリに正しいパスを指定したことを確認してください

C++ ヘッダーは読み取ります

__declspec(dllimport) HNLCPFW WINAPI cpfw_open(WCHAR *pwStrPort, WCHAR *pwStrParam, int nMode = CPFW_OM_NORMAL);


typedef struct
{
    void* hDev;
    int nMode;
    PNLCPFW_PLUG_API DevAPI;
    HINSTANCE hPlugDll;
    void *exData;
}NLCPFW,*HNLCPFW;

p\Invoke コードで IntPtr を取得するだけで問題ないと思います。

なぜこれが起こっているのかについてのアイデアは大歓迎です。すべてのdllをexeにコピーしました。この場合、これらは NLcpfw.dll、cpfw_udp.dll、cpfw_tcp.dll、cpfw_hidpos.dll などです。

leppie に感謝します。プラットフォームを X86 に変更する必要があります

4

0 に答える 0