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 に変更する必要があります