全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2121
推到 Plurk!
推到 Facebook!

執行檔呼叫 DLL ShowMessage 出現錯誤訊息

尚未結案
bearmaster
一般會員


發表:36
回覆:45
積分:16
註冊:2004-05-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-11-01 19:28:38 IP:210.208.xxx.xxx 未訂閱
請教各位大大,    我現在在建立 DLL 時發現有一些問題, 但不知該如何解決, 請各位大大幫忙.     點選 File\New\DLL Wizard 建立基本架構, 我在 DLL 函式內只是用 ShowMessage() 單純的顯示字串,
 
DLLtest.h
//---------------------------------------------------------------------------
extern "C" __declspec(dllexport) void    TestShowMessage(void);    Unit1.cpp
//---------------------------------------------------------------------------
#include 
#include 
#pragma hdrstop
//---------------------------------------------------------------------------
#pragma argsused    #include "DLLtest.h"    int WINAPI DllEntryPoint(HINSTANCE hinst, unsigned long reason, void* lpReserved)
{
    return 1;
}
//---------------------------------------------------------------------------    void    TestShowMessage(void)
{
    ShowMessage("DLL ShowMessage");
}
當我的執行檔呼叫到 DLL 內的 TestShowMessage() 時, 會有對話框跳出並且有顯示字串, 不過這是在有安裝 Borland C 的電腦上執行的結果. 若拿到沒安裝的PC上執行就會有如下的錯誤訊息. 所以我直接聯想到的是在執行檔專案的 Project\Options\Packages,Linker 內需要做修改, 修改如下, 但仍然不行, 仍會有上述的錯誤訊息. 所以我就將 DLL 專案內的 Project\Options\Packages,Linker 也做了相同的修改, 可是修改後 compile 會有錯誤訊息如下, 我現在就很困擾, 不曉得是否還有遺漏未載入檔案, 還是有設定未完成? 請各位大大幫幫忙.
jcjroc
高階會員


發表:21
回覆:279
積分:115
註冊:2002-09-18

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-11-02 08:22:23 IP:211.75.xxx.xxx 未訂閱
你的問題在于Option中,有關專案的相關路徑有問題而導致的. 另: 要Show一個Message Box,可以直接使用WinAPI的MessageBox來達到.
bearmaster
一般會員


發表:36
回覆:45
積分:16
註冊:2004-05-27

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-11-02 09:00:58 IP:210.208.xxx.xxx 未訂閱
感謝 jcjroc 大大回應,    是否可以請 jcjroc大大給我多一些提示, 我的路徑修改後的設定如下,   
 Include Directories:
$(BCB)\include
$(BCB)\include\vcl
$(BCB)\Imports
C:\Program Files\Microsoft DirectX 9.0 SDK (Summer 2004)\Include
$(BCB)\DSPACK234\src\DirectX9
$(BCB)\DSPACK234\src\DSPack    Library Directories:
$(BCB)\Projects\Lib
$(BCB)\lib\obj
$(BCB)\lib
$(BCB)\Imports
$(BCB)\DSPACK234\src\DirectX9
$(BCB)\DSPACK234\src\DSPack
但 compile 後仍然有錯誤訊息: [Linker Error]Unresolved external '__fastcall Dialogs::ShowMessage(const System::AnsiString)'... 另外, 就像jcjroc大大所說一樣, 直接使用 WinAPI 的 MessageBox 可以顯示出對話框及字串, 但是因為我的想法是希望逐步的將我需要用到的 VCL 加入到這個 DLL 中, 所以就想先以 ShowMessage() 開始作起. 其實在站裏我也有搜尋過相關的資料, 而且發現大部分的測試也都是使用 ShowMessage(), 只是不知道其他大大是否也有遇到這個問題?
jcjroc
高階會員


發表:21
回覆:279
積分:115
註冊:2002-09-18

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-11-02 13:35:47 IP:211.75.xxx.xxx 未訂閱
程式碼加上 #include "Dialogs.hpp"
bearmaster
一般會員


發表:36
回覆:45
積分:16
註冊:2004-05-27

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-11-02 14:01:33 IP:210.208.xxx.xxx 未訂閱
Hi jcjroc 大大,    我在我的 DLL project cpp 檔案內加入了  
 #include "Dialogs.hpp"
可是這問題仍然存在. 我有確定 Dialogs.hpp 檔案有在 Include Directories 裡面 (C:\Program Files\Borland\CBuilder6\Include\Vcl). 我也試著將此行放在 cpp file 的最上頭, 或是其他位置, 但結果相同. compile 後的錯誤訊息看起來似乎是我有檔案尚未 include 進來. [Linker Error]Unresolved external '__fastcall Dialogs::ShowMessage(const System::AnsiString)'... 是否我還有未設定的地方或是未載入檔案?
jcjroc
高階會員


發表:21
回覆:279
積分:115
註冊:2002-09-18

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-11-06 22:51:49 IP:60.248.xxx.xxx 未訂閱
你的問題是因為lib沒有被Link進來. 請確認你所Link的Libaray存不存在, 如果無法確定,但還是出錯,最簡單的方式就是把BCB移掉在重安一次.(雖然可以用直接指名LIB或OBJ的方式),但那不是長久之計. 另:盡量不要讓你的路徑出現中文字,有些Compiler會因此出錯
bearmaster
一般會員


發表:36
回覆:45
積分:16
註冊:2004-05-27

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-11-07 08:42:34 IP:210.208.xxx.xxx 未訂閱
Hi jcjroc 大大, 謝謝您的解答. 我的問題目前雖然是解決了, 但我不是很確定是否正確. 因為我仍然不知道應該需要 include 哪些檔案 (當需要用到 ShowMessage()), 或是應該需要 link 哪些檔案, 而錯誤訊息依舊... 所以我就用了最 stupid 方法...放一個 form 在 project 內, 如此就沒問題了, 但我不確定這樣作法是否正確.
jcjroc
高階會員


發表:21
回覆:279
積分:115
註冊:2002-09-18

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-11-08 08:06:12 IP:211.75.xxx.xxx 未訂閱
引言: Hi jcjroc 大大, 謝謝您的解答. 我的問題目前雖然是解決了, 但我不是很確定是否正確. 因為我仍然不知道應該需要 include 哪些檔案 (當需要用到 ShowMessage()), 或是應該需要 link 哪些檔案, 而錯誤訊息依舊... 所以我就用了最 stupid 方法...放一個 form 在 project 內, 如此就沒問題了, 但我不確定這樣作法是否正確.
ㄏㄏㄏ,忘了跟你說試試再#include "forms.hpp"
系統時間:2024-11-23 7:30:50
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!