0

我有一个非常简单的托管(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 结构。后者成功地用于这个非托管到托管桥的其他部分。

有任何想法吗?

是由于我不理解的返回值中的名称修改约定吗?

4

1 回答 1

0

我尴尬得要死!我在托管代码和非托管代码之间测试了一系列简单的函数,从将简单的 int 返回到结构、结构向量和结构列表。甚至将这些字段作为参数传入。

他们都工作了。

我做错什么了???

我是个白痴,我忘记了我还没有实现最初的愚蠢功能。当然,我所有的测试都已实施!所以我原来的发现函数被声明但没有实现。啊!我整天都在这上面度过。

(我永远不会猜到这是错误消息的原因。)

也许这会拯救因相同原因而收到相同消息集的其他人。

于 2013-04-09T20:35:04.937 回答