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

用VC寫C的dll加入C++ Builder的連結問題

答題得分者是:RaynorPao
fullgui
一般會員


發表:22
回覆:28
積分:10
註冊:2003-04-01

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-12-01 12:53:24 IP:163.28.xxx.xxx 未訂閱
各位大大: 我已參照RaynorPao<(VC-BCB 整合系列一) 如何由 BCB 使用 VC 所產生的 LIB 及 DLL >的文章,不過我是用VC寫一個.c檔,然後把它轉成dll來給C++ builder的.cpp使用。我的.c檔的code如下: 
 
#include "vcdll.h"
#include "windows.h"    BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
                                         )
{
    switch (ul_reason_for_call)
        {
                case DLL_PROCESS_ATTACH:
                case DLL_THREAD_ATTACH:
                case DLL_THREAD_DETACH:
                case DLL_PROCESS_DETACH:
                        break;
    }
    return TRUE;
}    int testfun(int a, int b)
{
        return (a   b);
}
我的.h檔如下:
 
#define DLL_API __declspec(dllexport)    DLL_API        int testfun(int a, int b);    
我是使用靜態連結,結果我的C builder的.cpp要使用這個dll時,會產生此錯誤: [Linker Error] Unresolved external 'testfun(int, int)' referenced 請各位大大幫我解決這個問題,謝謝。
RaynorPao
版主


發表:139
回覆:3622
積分:7025
註冊:2002-08-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-12-01 13:06:39 IP:203.73.xxx.xxx 未訂閱
引言: 各位大大: 我已參照RaynorPao<(VC-BCB 整合系列一) 如何由 BCB 使用 VC 所產生的 LIB 及 DLL >的文章,不過我是用VC寫一個.c檔,然後把它轉成dll來給C builder的.cpp使用。我的.c檔的code如下:
 
#include "vcdll.h"
#include "windows.h"    BOOL APIENTRY DllMain( HANDLE hModule, 
                       DWORD  ul_reason_for_call, 
                       LPVOID lpReserved
                                         )
{
    switch (ul_reason_for_call)
        {
                case DLL_PROCESS_ATTACH:
                case DLL_THREAD_ATTACH:
                case DLL_THREAD_DETACH:
                case DLL_PROCESS_DETACH:
                        break;
    }
    return TRUE;
}    int testfun(int a, int b)
{
        return (a   b);
}
我的.h檔如下:
 
#define DLL_API __declspec(dllexport)    DLL_API        int testfun(int a, int b);    
我是使用靜態連結,結果我的C builder的.cpp要使用這個dll時,會產生此錯誤: [Linker Error] Unresolved external 'testfun(int, int)' referenced 請各位大大幫我解決這個問題,謝謝。
fullgui 你好:
(1)建議你再確認該篇文章中的所有步驟
( >
    -- 
        
------
-- 若您已經得到滿意的答覆,請適時結案!! --
-- 欲知前世因,今生受者是;欲知來世果,今生做者是 --
-- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 --
fullgui
一般會員


發表:22
回覆:28
積分:10
註冊:2003-04-01

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-12-01 14:56:35 IP:163.28.xxx.xxx 未訂閱
謝謝RaynorPao大大,我之前的作法是:我按照RaynorPao的文章,只不過是.cpp換成.c檔,在第一個步驟可以做出lib檔,但是在第二個步驟要做出dll檔時,會有以下錯誤:Creating library Debug/VCDLLc.lib and object Debug/VCDLLc.exp VCDLLc.obj : error LNK2001: unresolved external symbol "int __cdecl AddMethod(int,int)" (?AddMethod@@YAHHH@Z) Debug/VCDLLc.dll : fatal error LNK1120: 1 unresolved externals Error executing link.exe. 也就是說,我的寫法若是cpp,則文章中的步驟一和二皆可成功,但是檔案是c時,則不行。所以後來我在VC上,我直接把.c檔compiler成dll,然後再拿給C builder使用,但是會發生"[Linker Error] Unresolved external 'testfun(int, int)' referenced"的錯誤,因為工作需要,我必須把.c檔包成dll,然後在BCB上給.cpp檔裡的函式呼叫使用,因為RaynorPao大大的範例是以cpp為例,所以要是檔案是C檔的話,我應該注意哪些呢?謝謝。
fullgui
一般會員


發表:22
回覆:28
積分:10
註冊:2003-04-01

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-12-01 19:38:52 IP:163.28.xxx.xxx 未訂閱
我已找到解決的方法,直接將dll中所有export的函式的定義式,在BCB中的header檔前面加上extern "C",就可以解決,謝謝大家的幫忙。
系統時間:2024-05-04 18:46:12
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!