我有一个非常简单的托管(CLI 互操作)函数调用一个非托管函数:
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 结构。后者成功地用于这个非托管到托管桥的其他部分。
有任何想法吗?
是由于我不理解的返回值中的名称修改约定吗?