模塊A 是C 語言
A.H
extern int _declspec(dllexport) test_dllGlobalVar1;
A.C
test_dllGlobalVar1 = 100;
希望模塊 B 中呼叫 test_dllGlobalVar1
模塊B是WIN32控制臺程式,其中
1, stdafx.h
#pragma once
#include "targetver.h"
#include <stdio.h>
#include <tchar.h>
extern "C" {
#include "test_dllGlobalvar.h"
}
2, B.cpp
#pragma comment(lib, "A.lib")
extern int _declspec(dllimport) test_dllGlobalVar1;
int main()
{
test_dllGlobalVar1 = 100;
}
A模塊產生A.lib和A.dll者已經好了,并用A中的其它函式都能被B正確呼叫,就是全域變數時有問題,編譯B時提示dll 鏈接不一致,然后連接運行進出錯, 錯誤提示如下
嚴重性 代碼 說明 專案 檔案 行
錯誤 LNK2001 無法決議的外部符號 _test_dllGlobalVar1 B D:\Test_Program\B.obj 1
嚴重性 代碼 說明 專案 檔案 行
警告 C4273 “test_dllGlobalVar1”: dll 鏈接不一致 B d:\test_program\B.cpp 25
嚴重性 代碼 說明 專案 檔案 行
錯誤 LNK1120 1 個無法決議的外部命令 B D:\Test_Program\Debug\B.exe 1
為什么呢? 我昨天都正確呼叫過一段時間(dll全域變數和dll函式都呼叫對),后來不知道改了哪個環境設定,就一直存在這個錯誤,函式dll呼叫一直沒有問題,就是全域 變數有問題,請高手指教。
uj5u.com熱心網友回復:
extern int _declspec(dllexport) test_dllGlobalVar1()
{
return 100;
}
uj5u.com熱心網友回復:
函式的方式是可以的,但我想實作全域變數的方式
uj5u.com熱心網友回復:
#pragma data_seg("Shared")static LONG test_dllGlobalVar1=100;
#pragma data_seg()
uj5u.com熱心網友回復:
還是不行,測驗了一下,dll中的宏,函式都可以,就是全域變數不行,求繼續指導
uj5u.com熱心網友回復:
LONG test_dllGlobalVar1=100;exe ,dll 都要。
uj5u.com熱心網友回復:
您好,能說得詳細一點嗎?最好貼一下代碼,這個問題困繞我太久了
uj5u.com熱心網友回復:
我這邊測驗依然不行,您能貼一下代碼嗎?謝謝。感覺VS太為難人了,一個全域變數共享,居然被VS繞了那么多的彎子。
uj5u.com熱心網友回復:
不知道 這樣 行不行#pragma data_seg("mydata")
HWND glhPrevTarWnd=NULL; //上次滑鼠所指的視窗句柄
HWND glhDisplayWnd=NULL; //顯示目標視窗標題編輯框的句柄
HHOOK glhHook=NULL; //安裝的滑鼠勾子句柄
HINSTANCE glhInstance=NULL; //DLL實體句柄
BOOL gbIsWinDown = FALSE;
BOOL gbWinFlag = FALSE;
#pragma data_seg()
#pragma comment(linker, "/section:mydata, rws")uj5u.com熱心網友回復:
http://blog.163.com/wangpf2008@126/blog/static/3515511920077765318482/轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/72185.html
標籤:基礎類
上一篇:使用Kakadu將adv202輸出資料轉化成視頻,求助討論?
下一篇:程式員職業瓶頸
