Я написал библиотеку с экспортируемой функцией. Если вызывать функцию из tmain, тогда она работает отлично, а если я пытаюсь вызвать ее в фукции, работающей в своем адресном пространстве, то линкер дает ошибку —
work.obj : error LNK2019: unresolved external symbol "void __cdecl Work::EventWr(void)" (?EventWr@Work@@YAXXZ) referenced in function "void __cdecl Work::Run(void)" (?Run@Work@@YAXXZ)
.\Debug/serv.exe : fatal error LNK1120: 1 unresolved externals
Как сделать, чтобы она работала именно в этой функции?
Здравствуйте, Stich, Вы писали:
S>Я написал библиотеку с экспортируемой функцией. Если вызывать функцию из tmain, тогда она работает отлично, а если я пытаюсь вызвать ее в фукции, работающей в своем адресном пространстве, то линкер дает ошибку -
Так, начнем с того, что адресное пространство появляется значительно позже, чем линкер выдает ошибку. Адресное пространство появляется у программы после ее загрузки операционной системой и исчезает после выгрузки S>work.obj : error LNK2019: unresolved external symbol "void __cdecl Work::EventWr(void)" (?EventWr@Work@@YAXXZ) referenced in function "void __cdecl Work::Run(void)" (?Run@Work@@YAXXZ) S>.\Debug/serv.exe : fatal error LNK1120: 1 unresolved externals S>Как сделать, чтобы она работала именно в этой функции?
Оччень непонятно кто где. Начнем по порядку. библиотеку с экспортируемой функцией это DLL?
Функция, которую ты вызываешь, описана в библиотеке?
Здравствуйте, Leshi, Вы писали:
L>Так, начнем с того, что адресное пространство появляется значительно позже, чем линкер выдает ошибку. Адресное пространство появляется у программы после ее загрузки операционной системой и исчезает после выгрузки
не знал... вернее знал, но вопрос сформулировал неправильно, наверно я имел ввиду пространство имен
L>Оччень непонятно кто где. Начнем по порядку. L>библиотеку с экспортируемой функцией это DLL? L>Функция, которую ты вызываешь, описана в библиотеке?
Здравствуйте, Stich, Вы писали:
L>>Функция, которую ты вызываешь, описана в библиотеке? S>да, в длл описана экспортирумая функция
Так, это хорошо. Как ты подключаешь DLL: явно (LoadLibrary) или неявно (в хедерах программы надо писАть extern "C" void __declspec(dllimport) EventWr(); и при линковке подключать файл mydll.lib, в твоем случае, скорее log.lib)?
Здравствуйте, Leshi, Вы писали:
L>Здравствуйте, Stich, Вы писали:
L>>>Функция, которую ты вызываешь, описана в библиотеке? S>>да, в длл описана экспортирумая функция L>Так, это хорошо. Как ты подключаешь DLL: явно (LoadLibrary) или неявно (в хедерах программы надо писАть extern "C" void __declspec(dllimport) EventWr(); и при линковке подключать файл mydll.lib, в твоем случае, скорее log.lib)?
я подключал неявно и lib файл присоединял.Однако extern "C" void __declspec(dllimport) EventWr(); не писал.Это надо писать в хидере главного модуля или модуля где я хочу функцию использовать?
Здравствуйте, Stich, Вы писали:
S>я подключал неявно и lib файл присоединял.Однако extern "C" void __declspec(dllimport) EventWr(); не писал.Это надо писать в хидере главного модуля или модуля где я хочу функцию использовать?
Надо это писать так, чтобы когда ты вызываешь EventWr это определение уже было. Хочешь в главный хедер, хочешь непосредственно перед вызовом.