2015-03-03 3 views
0

Много раз я нашел эту проблему (см. Заголовок моего вопроса) в Интернете и в stackoverflow, хотя чаще всего связан с объектами. Здесь нет объектов. Просто C/C++. Я попробовал большинство предложений, чтобы решить эту проблему. Ничего не получилось. Приведенный ниже код был сведен к минимуму, чтобы изолировать проблему. Это Visual Studio 2013, C++. Я хочу использовать DLL с функциями, написанными на C. Ниже, файл .h с именем Strings_LV_CPP.h.Неразрешенный внешний символ, на который ссылается функция _main

#pragma pack(1) 

#ifdef __cplusplus 
extern "C" { 
#endif 

typedef struct { 
LStrHandle s; 
} TStruct_String; 

/*! 
* Write_Struct_String 
*/ 
void __cdecl Write_Struct_String(char StringI[], TStruct_String *StructI, 
    TStruct_String *StructO); 
#ifdef __cplusplus 
} // extern "C" 
#endif 

#pragma pack(pop) 

следует за основной программой.

#include <windows.h> 
#include <Strings_LV_CPP.h> 

int main() 
{ 
char s[] = "STRING"; 
TStruct_String *CL; 

CL = (TStruct_String *)malloc(sizeof(TStruct_String)); 
// void __cdecl Write_Struct_String(char StringI[], TStruct_String *StructI, TStruct_String *StructO) 

Write_Struct_String(s, CL, CL); 

return 0; 
} 

Выход производства сборки:

1>------ Rebuild All started: Project: LVStructString, Configuration: Debug Win32 ------ 
1>LVStringApplication.cpp 
1>LVStringApplication.obj : error LNK2019: unresolved external symbol _Write_Struct_String referenced in function _main 
1>C:\Users\Werf\Documents\Local CPP projects\LVStructString\Debug\LVStructString.exe : fatal error LNK1120: 1 unresolved externals 
========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ========== 

Visual Studio: Используется чистую установку Visual Studio, создал свежий чистый проект, консольных и win32, но никакой разницы. Пробовал много разных вариантов и комбинаций, как предполагалось, но, похоже, пропустил правильный. Никакого результата, поэтому решили обратиться к моим коллегам из мира.

Самый обязанный с любым ответом.

Dirk

ответ

0

функции DLL должны использовать dllexport и DllImport. Посмотрите на this ответ.