2

私はC++/CLI プロジェクトでlib_usbusb_get_bussesを使用しています。マネージ C++/CLI コードで lib_usb の関数とその他の関数を使用する必要があります。

次のようにマネージドAutoPtrを使用して構造体を作成しusb_busます。

AutoPtr<struct usb_bus> bus;

関数を呼び出す必要がありますusb_get_bussesが、リンカーは呼び出し規約に不満を持っているようです。CLR は clrcall 呼び出し規約を使用し、明らかに C を使用し__cdeclます。

usb_bus* usb_get_busses(void)<--- C 関数の署名。

lib_usbC++/CLI でを使用できるようにするにはどうすればよいですか? C++/CLI ラッパーなどを作成する必要がありますか?

リンカーは次のメッセージを吐き出します。

エラー LNK2031: 「extern "C" struct usb_bus * __clrcall usb_get_busses(void)」の p/invoke を生成できません (?usb_get_busses@@$$J0YMPAUusb_bus@@XZ); 呼び出し規約がメタデータにない

4

1 に答える 1

1

それはまったく指定されていません__cdecl。リンカのエラーを見てください - それは明確に述べてい__clrcallます。で明示的に指定してみてください__cdecl

于 2012-06-18T10:42:09.907 に答える