Delphi写的动态链接库,如何在VC当中调用呢?(30分)

  • 主题发起人 主题发起人 Archerfl
  • 开始时间 开始时间
A

Archerfl

Unregistered / Unconfirmed
GUEST, unregistred user!
用Delphi写的动态链接库编译后只有.dll文件,没有相应的.lib文件,在VC当中声明引入
函数后,运行时编译器总说找不到相应函数!
请各位大虾指教一二,谢!
 
是调用dll文件,而不用编译到VC中
 
都声明为 stdcall __stdcall
 
to wrf:
    我不太明白您的意思!但是单单一个.dll文件在VC这边运行的时候会报告无法定位
要调用的函数的!
to jsxjd:
    谢谢,这个我已经注意到了!但是,我问的并不是如何写一个其它任何语言都可以
调用到的dll,而是如上所述!
 
用LoadLibrary呀,我举个例子:

//================================================
HINSTANCE hInst = LoadLibrary("USER32.DLL");
if(hInst)
{
typedef (WINAPI *MYFUNC)(HWND, COLORREF, BYTE, DWORD);
MYFUNC xFun = NULL;
xFun = (MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");
if(xFun)
{
//AfxMessageBox("ok");
SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE, WS_EX_LAYERED);
xFun(GetSafeHwnd(), RGB(255,255,255), 180, LWA_ALPHA);
}
else AfxMessageBox("failed");
FreeLibrary(hInst);
}
 
to zw84611:
  谢谢,这样确实可以。不过,有没有办法用到隐式dll调用呢?
  用VC写的dll,在Delphi中可以如你所述的方法显式调用,或者通过接口单元的声明隐
式调用,那么反过来,难道就只有用显式调用这一种方法吗?这也太麻烦了!
 
VC调用Delphi的DLL

Delphi中的声名格式:
Function ShowDialog( hMainWnd:THandle; Msg:PChar ):integer; stdcall;
输出到Dll文件中时,名称不分裂。
VC中的调用格式:
extern "C" __declspec(dllimport) int __stdcall ShowDialog( HWND hwnd,char* Msg );

.如带有__stdcall,则要求Lib文件中对应函数名称分裂,可有以下步骤生成Lib文件:
.用Impdef.exe生成def文件,格式为:Impdef def文件名 dll文件名
.手工调制def文件参数,如ShowDialog改为ShowDialog@8
.用Lib.exe生成lib文件,格式为:Lib /def:def文件名
.如声名中无__stdcall,默认调用格式仍为stdcall,但不要求名称分裂,用以下批处理文件MkLib.bat可生成Lib文件:

@echo off
if %1.==. goto error
impdef %1.def %1.dll
lib /def:%1.def
goto end
:error
echo Usage: MkLib DllName
echo Note: Don't add extension ".dll" to parameter "DllName"
:end

或者试试这个dll2lib: http://www.fixdown.com/key/767.htm
 
to zw84611:
  您提到的这个文件Impdef.exe,在我的机子上找不到,我的系统是Win2000 Server,VC
用得是6.0 。是不是您写错了?
 
TDump.exe-Delphi 和 C++ Builder 提供
Impdef.exe 和 Implib.exe - C++ Builder提供
DumpBin.exe-VC 提供
Lib.exe-VC 提供

http://webclub.kcom.ne.jp/ma/colinp/impdef.zip

也可以试试这个dll2lib: http://www.fixdown.com/key/767.htm
 
to zw84611:
  请问您在Delphi中TDump.exe如何使用,我看不懂它的语法,请举一个例子出来,谢!
 
其实我没用过tdump:
-----------------------------------------------------------
D:/WINNT/system32>tdump
Turbo Dump Version 5.0.16.6 Copyright (c) 1988, 1999 Inprise Corporation
Syntax: TDUMP [options] [InputFile] [ListFile] [options]
-a Display file in 8-bit ASCII -a7 Display file in 7-Bit ASCII
-b# Start at offset # -C Dump OBJ, LIB COFF info
-d Dump OBJ, LIB debug info -e Dump as EXE
-ed No EXE debug info -ee[=x] PE exports only (x=srch)
-eiID EXE tbls:HDR,OBJ,FIX,NAM,ENT -el No EXE line numbers
-em[=x] PE imports only (x=srch) -em.[x] PE imp. modules (x=srch)
-ep No EXE PE header display -er No EXE relocation records
-ea[:v] Dump Exports(:v sort on RVA) -ex No New Executable dump
-h Output in hex -iID Incl dbg tbl:[?/abc...rst]
-l Dump as LIB (OMF) -le[=x] Dump EXPDEF recs (x=srch)
-li[=x] Dump IMPDEF recs (x=srch) -m No C++ de-mangling
-o Dump as OBJ (OMF) -oc Do OMF CRC check
-oiID Include OMF rec (? for list) -oxID Exclude OMF rec (? for list)
-q Suppress copyright message -r Raw dump of records
-R Dump PE relocation table -s[=x] Dump strings (x=srch)
-su[=x] Dump unix style strings -um Unmangle file list of names
-v Verbose dump of records -xID Excl dbg tbl:[?/abc...rst]
-? Display a better help screen
 
请问各位大虾,有谁用过TDump,能否举个使用方法的例子,谢!
 
后退
顶部