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

C++ builder中开发DLL和序

尚未結案
mchakuna
一般會員


發表:41
回覆:45
積分:17
註冊:2004-01-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-04-14 14:03:22 IP:211.147.xxx.xxx 未訂閱
我一直用Delphi, 最近在学C++。於是用上C++ builder。我过去曾用Delphi写过一个DLL程序。其入很简单    
 
////////////////////////////////////////////////////////////
function LibInit : boolean;
begin
  ...
  Result := TRUE;
end;    procedure LibExit;
begin
  ...
end;    // DoSomething will be called by the main program
function DoSomething: Integer; stdcall;
begin
  ...
  Result := 0;
end;    ...
...
...
exports
DoSomething index 1,    
换了BCB后, 我根据一些资料将上述代码改为
 
// DLL entry point
BOOL WINAPI DllMain( HANDLE hModule, DWORD  UC, LPVOID lpReserved )
{
  ...
   switch (UC)
  {
    case DLL_PROCESS_ATTACH:
    {
      ...    
    }
    break;
    case DLL_THREAD_ATTACH: break;
    case DLL_THREAD_DETACH: break;
    case DLL_PROCESS_DETACH: break;
  }
  return TRUE;
}    // Callbacks from Becky!    #ifdef __cplusplus
extern "C"{
#endif    //////////////////////////////////////////////////////////////////////int WINAPI DoSomething()
{
  ...  
  return 0;
}    ///////////////////////////////
// 导出文件为 *.def
DESCRIPTION  'My DLL'    EXPORTS
DoSomething         @1    
这个DLL是跟一个第三方程序协作的。这个第三方程序会读入这个DLL然后运行DoSomething这个函数。这段代码在我的机器上没有问题。但一放到别的机器上就不能被第三方程序找到。然而,如果用Delphi写,则不管在本地还是别的机器上都没有问题。请教大家到底那里出毛病了? 另外,我有个很严重的问题想请大家帮忙解决。我在用Delphi开发上述DLL时用到了一个组件(姑且叫ABC)。然而,当我转成BCB时为了继续用上它。我就用 dcc32 - JPHW abc.pas 将它编辑成abc.hpp跟abc.obj。然后连结到BCB中,并加入
 
...
#include 
#pragma hdrstop
...
#include "mysetting.cpp"
#pragma link "ABC"
来连结到我的程序中。问题出现了,虽然编译及运行均正常。但当我用exescope这类软件查看DLL的结构时却发现问题。本来我的DLL只导出DoSomething这个函数。然而,现却把ABC中的所有函数跟我自已定义在mysetting.cpp(包含一个TForm)中的函数都一并导出了。这是怎样回事?怎样解决? 用Delphi版本的DLL的导出结构为 序号 地址 名称 00000001 00403328 DoSomething 用BCB版本的DLL的导出结构为 序号 地址 名称 ... 00000025 00502118 ABC@ShowTime$qqr16System@TDateTime ... 00000001 00403328 DoSomething ... 000000D0 0041B614 _MySettingFrom 000000CE 0041B408 _MySettingFrom 000000CE 0041B60C MySettingFrom 000000AE 004160F8 __CPPDebugHook 不知是否因为多导出了这些函数所以第三方程序不能正常载入我的DLL。请各位帮忙看看。先谢了。
mchakuna
一般會員


發表:41
回覆:45
積分:17
註冊:2004-01-07

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-04-14 23:27:28 IP:211.147.xxx.xxx 未訂閱
我刚才又看了那个DLL, 发现它导入了vcl60.bpl及rtl60.bpl。这两个是什么?是运行期间连接入来的吗?如果系统没有安装Delphi及BCB, 是否就等於说这个DLL不能起作用?
anpino
版主


發表:31
回覆:477
積分:231
註冊:2003-01-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-04-15 11:41:33 IP:218.32.xxx.xxx 未訂閱
您好,請參考: BCB编写DLL终极手册 http://www.programfan.com/showarticle.asp?id=2271 在C Builder里创建可以被Visual C 使用的DLL http://www.csdn.net/develop/article/24/24393.shtm ------------------------------- 數學系是內功很強(邏輯/分析) 資工系是招式很多(程式技巧) 就像令狐沖VS東方不敗:D -------------------------------
mchakuna
一般會員


發表:41
回覆:45
積分:17
註冊:2004-01-07

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-04-15 16:47:00 IP:211.147.xxx.xxx 未訂閱
谢谢,我再看看。 还有一个问题。用软件查看BCB产生的DLL时,除了看到一些我定义的将要导出的函数外。还看到形式为ABC@ShowTime$qqr16System@TDateTime的东东。有没有方法把它去掉。因为这样会把我的程序细节泄漏出来啊。
系統時間:2024-05-12 8:20:26
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!