アンマネージド関数を呼び出す非常に単純なマネージド (CLI Interop) 関数があります。
void ManagedZigBeeTransport::StartDiscovery(void)
{
std::list<sDeviceEndPoint> devices = zbTransport->startDiscovery();
}
zbTransport は管理されていないオブジェクトです。このアンマネージド オブジェクトには、同様のマネージド ラッパーで問題なく呼び出されるメソッドの例が他にもいくつかあり、それらはすべて機能します。ただし、戻り値はありません。これはそうです。
それは私に恐ろしいことを与えます
CppBridgeTransports.obj : error LNK2028: unresolved token (0A00033B) "public: class std::list<struct _sDeviceEndPoint,class std::allocator<struct _sDeviceEndPoint> > __thiscall ZBTransport::startDiscovery(void)" (?startDiscovery@ZBTransport@@$$FQAE?AV?$list@U_sDeviceEndPoint@@V?$allocator@U_sDeviceEndPoint@@@std@@@std@@XZ) referenced in function "public: void __clrcall CppBridge::ManagedZigBeeTransport::StartDiscovery(void)" (?StartDiscovery@ManagedZigBeeTransport@CppBridge@@$$FQ$AAMXXZ)
に続く
CppBridgeTransports.obj : error LNK2019: unresolved external symbol "public: class std::list<struct _sDeviceEndPoint,class std::allocator<struct _sDeviceEndPoint> > __thiscall ZBTransport::startDiscovery(void)" (?startDiscovery@ZBTransport@@$$FQAE?AV?$list@U_sDeviceEndPoint@@V?$allocator@U_sDeviceEndPoint@@@std@@@std@@XZ) referenced in function "public: void __clrcall CppBridge::ManagedZigBeeTransport::StartDiscovery(void)" (?StartDiscovery@ManagedZigBeeTransport@CppBridge@@$$FQ$AAMXXZ)
機能しているこれらのスレッドで見た情報を適用できませんでした ( std::list<> ヘッダー ファイルを追加するなどの非常に単純なものもあります)。
アンマネージ sDeviceEndPoint 構造体もヘッダー ファイルで定義されます。アイデアは、このアンマネージ std::list<> を取得し、それを使用してマネージ ArrayList() をロードすることでした。しかし、私はこの簡単なステップを踏むことさえできません。std::list または sDeviceEndPoint 構造体のどちらが問題を引き起こしているのかわかりません。後者は、この管理されていないブリッジから管理されたブリッジの他の部分でうまく使用されています。
何か案は?
私が理解していないのは、戻り値からの名前マングリング規則によるものですか?