2013-04-09 4 views
0

У меня есть управляемая функция абсурдно простой (CLI Interop), призывающая неуправляемая функцию:LNK2028 ошибки LNK2019 по вызову неуправляемой функции в управляемой функции

void ManagedZigBeeTransport::StartDiscovery(void) 
{ 
    std::list<sDeviceEndPoint> devices = zbTransport->startDiscovery(); 
} 

где zbTransport является unmanged объекта. У меня есть несколько других примеров методов в этом неуправляемом объекте, которые вызываются в подобных управляемых оболочках без проблем, и все они работают. Однако они не имеют возвращаемого значения. Это делает.

Это дает мне страшного

CppBridgeTransports.obj : error LNK2028: unresolved token (0A00033B) "public: class std::list<struct _sDeviceEndPoint,class std::allocator<struct _sDeviceEndPoint> > __thiscall ZBTransport::startDiscovery(void)" ([email protected]@@[email protected][email protected]@[email protected][email protected]@@[email protected]@@[email protected]@XZ) referenced in function "public: void __clrcall CppBridge::ManagedZigBeeTransport::StartDiscovery(void)" ([email protected]@[email protected]@$$FQ$AAMXXZ) 

с последующего

CppBridgeTransports.obj : error LNK2019: unresolved external symbol "public: class std::list<struct _sDeviceEndPoint,class std::allocator<struct _sDeviceEndPoint> > __thiscall ZBTransport::startDiscovery(void)" ([email protected]@@[email protected][email protected]@[email protected][email protected]@@[email protected]@@[email protected]@XZ) referenced in function "public: void __clrcall CppBridge::ManagedZigBeeTransport::StartDiscovery(void)" ([email protected]@[email protected]@$$FQ$AAMXXZ) 

Я не был в состоянии применить любого из информации, которую я видел в этих нитях, которые функционировали (некоторые довольно простой, как добавление файла заголовка std :: list <>).

Неуправляемая структура sDeviceEndPoint также определена в файле заголовка. Идея заключалась в том, чтобы получить этот неуправляемый std :: list <> и использовать его для загрузки управляемого ArrayList(). Но я не могу пройти этот простой шаг. Я не знаю, что вызывает проблему: std :: list или sDeviceEndPoint. Последний успешно используется в других частях этого неуправляемого управляемого моста.

Любые идеи?

Должно ли это из-за названия соглашений о возврате, которые я не понимаю?

ответ

0

Я смущен как ад! Я проверил ряд простых функций между управляемым и неуправляемым кодом, от возврата простого int к структуре, векторам структур и списку структур. Даже передал эти поля в качестве параметра.

Все они работали.

Что я сделал неправильно ???

Идиот, что я был. Я забыл, что еще не реализовал оригинальную туповатую функцию. Конечно, все мои тесты были реализованы! Итак, моя оригинальная функция открытия была объявлена, но не реализована. AARRGG! Весь день я потратил на это.

(я никогда бы не догадался, что и послужило причиной для сообщения об ошибке.)

Может быть, это сэкономит кого-то, кто получает одни и те же наборы сообщений по той же причине.

Смежные вопросы