65,211
社区成员
发帖
与我相关
我的任务
分享static int __declspec(dllexport) integer;
//错误代码为
error C2201: “integer”: 必须有外部链接才可进行导出/导入
//dllA
__declspec(dllexport) int share_int = 'A';
extern "C"
__declspec( dllexport )
int do_some_thing()
{
printf("A::do_some_thing()...in %c \n", share_int);
return share_int;
}
extern "C"
__declspec( dllexport )
int change_share_int(int val)
{
int temp = share_int;
share_int = val;
return temp;
}
//client
const TCHAR* DLL_DEBUG_PATH = _T("a.dll");
#pragma comment(lib, "../debug/a.lib")
__declspec(dllimport) int share_int;
int _tmain(int argc, _TCHAR* argv[])
{
HINSTANCE hDllA = LoadLibrary(DLL_DEBUG_PATH);
//HINSTANCE hDllB = LoadLibrary(DLL_B_PATH);
typedef int (*DOSOMETHINGFUNC)();
typedef int (*CHANGESHAREINTFUNC)(int);
DOSOMETHINGFUNC p_do_some_thing = (DOSOMETHINGFUNC)GetProcAddress(hDllA, "do_some_thing");
CHANGESHAREINTFUNC p_change_share_int = (CHANGESHAREINTFUNC)GetProcAddress(hDllA, ("change_share_int"));
if(!p_do_some_thing || !p_change_share_int){
printf("get func form dlla is failure.\n");
return 1;
}
p_do_some_thing();
int old_share_int = p_change_share_int(20);
printf("old share int before dll a is: %d", old_share_int);
printf("old share int before dll a is: %d", share_int);
//p_do_some_thing = (DOSOMETHINGFUNC)GetProcAddress(hDllB, ("do_some_thing"));
//p_change_share_int = (CHANGESHAREINTFUNC)GetProcAddress(hDllB, ("change_share_int"));
//if(!p_do_some_thing || !p_change_share_int){
// printf("get func form dll b is failure.\n");
// return 1;
//}
//p_do_some_thing();
//old_share_int = p_change_share_int(21);
//printf("old share int before dll b is: %d", old_share_int);
return 0;
}
无法解析的外部符号 _integer如果将extern除掉,则应用程序编译不会出现错误,但是integer的值为0,并非为我修改的值。。。。。还请高手指教error C2159: 指定了一个以上的存储类