【发布时间】:2016-08-17 11:56:13
【问题描述】:
我有一个 C++ 项目,我在其中添加了一些纯 C gnu 库。我的任务是更改一些用于那些需要从 dll 动态加载的函数,所以我所做的是,我声明了原型,并创建了一个外部变量:
文件prototypes.h:
typedef char *( __cdecl * _ReParseHtml ) ( DOM * data )
文件func_defs.h
extern _ReParseHtml DllReParseHtml;
然后在我的主文件 program.cpp 我声明:
_ReParseHtml DllReParseHtml;
int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPWSTR lpCmdLine,
_In_ int nCmdShow)
{
HINSTANCE hDLL = LoadLibrary("somelib.dll");
if(hDll != 0){
DllReParseHtml = (_ReParseHtml)GetProcAddress(hDLL,
"ReParseHtml");
//etc
}
}
所以现在我想在我添加的纯 .c 文件中使用它:
parser.c:
#include "func_defs.h" // here is the extern _ReParseHtml DllReParseHtml;
int create_source(char * buf)
{
char * modified = DllReParseHtml(buf);
// etc..
}
但我收到错误 LNK2001 unresolved external symbol DllReParseHtml。
假定调用此函数的源 C 源代码 int create_source(char * buf) 中的函数不在 extern "C" { } 块或类似的块中。
【问题讨论】:
-
需要,更多,逗号,to,be,可读。
-
您可能需要在您的 program.cpp 中添加
extern "C",因为您将需要它。您也可以将_ReParseHtml DllReParseHtml;移动到您的 parser.c 而不是您的 program.cpp -
@Elijan9 我需要在项目的其他几个 C 文件中使用它。这就是为什么我这样宣布
-
@KlasLindbäck 它不是 dll。我只有
c++项目,我在其中使用了一些纯C 代码。在那个纯 C 代码中,我需要访问在我的项目中声明的全局变量。在我的帖子中,全局变量是从WinMain中的dll 动态加载的函数。
标签: c++ c linker global-variables extern