请问,如何调用vc写的dll

cchao 2005-04-23 12:27:12
如何以动态,静态的方法调用vc写的dll中的函数,变量和类
希望能够得到可以编译的delphi以及相应vc dll的例子
我的邮箱是:feifei_jerry@263.net
非常感谢

还有,再vc中写def有什么用,delphi可用吗?
...全文
123 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
cchao 2005-04-30
  • 打赏
  • 举报
回复
算了 结了 谢谢各位
cchao 2005-04-28
  • 打赏
  • 举报
回复
要是vc的dll和delphi都能直接编译并成功运行 我再给加100分
feifei_jerry@263.net
cchao 2005-04-28
  • 打赏
  • 举报
回复
还是不行啊
和我的差不多呀
拜托谁给我发一份能用的呀
或者指出我的函数导出/调用的错误
beyondtkl 2005-04-26
  • 打赏
  • 举报
回复
類不行 除非做成com.

因為vc,delphi的類的布局都不同 怎麼去訪問呢。。

void __stdcall msg(char* str)
{
MessageBox(0,str,str,MB_OK);
}

-> delphi // 靜態調用。
procedure msg(str: PChar); stdcall; external 'd.dll' name 'msg';
// 動態
type PMsgFunc = procedure(str: PChar);stdcall;

var
msg: PMsgFunc;
hDll: THandle;
hDll := LoadLibrary('d.dll');
ASSERT(hDll <> 0);
msg := (PMsgFunc)GetProcAddress(hDll, 'msg');
XINGXIMU 2005-04-25
  • 打赏
  • 举报
回复
二楼三楼说的对
cchao 2005-04-25
  • 打赏
  • 举报
回复
to njbaige(白鸽)
你没有看我的dll吧
char* 和 pchar 是绝对对应的
pchar本身就是为了兼容c字符串才有的
cchao 2005-04-25
  • 打赏
  • 举报
回复
void __stdcall msg(char* str)
{
MessageBox(0,str,str,MB_OK);
}

不好意思,我dll导出的函数体里面写错了,应该是这样
不过也没有什么关系,不影响问题
希望高手指点
cchao 2005-04-25
  • 打赏
  • 举报
回复
拜托,别告诉我谁说的对,告诉我我的东西错在哪好不好,那些个说的对的东西,我已经考虑到了
况且,我如果用BCB导出那个函数的话,是能调用的,就是vc不可以,摆脱谁给我一个例子,谢谢
(听说vc的dll格式有不一样的地方,不是说omf和coff,是说动态库本身,望告知,另外,用vc写dll时,似曾听说需要修改def文件,而且有什么名字的规范,希望得到解答,可再加分,谢谢)
cchao 2005-04-24
  • 打赏
  • 举报
回复
另外还有属性和类的到出
这个dll的东西在vc下面试过是可以调用的

谁有能用的例子发一个给我好吗?
万分感谢
cchao 2005-04-24
  • 打赏
  • 举报
回复
VC中的声明和定义如下
extern "C" __declspec(dllexport) void __stdcall HelloDll(char *str);

void __stdcall msg(char* str)
{
return (i+1);
}
科技互联人生 2005-04-24
  • 打赏
  • 举报
回复
还有就是在VC 中设置函数接口参数的时候,如果在DELPHI 中没有那样的类型,就会调用出错的哦~~
cchao 2005-04-24
  • 打赏
  • 举报
回复
谁有能用的vc和delphi的程序 发给我一份好吗?谢谢
上面的静态调用,我是知道的
procedure msg( str:pchar); stdcall; external 'dll.dll' name msg ;
但是我这样了
不行 cdecl我也试了 不是调用惯例的问题
另外,动态也不好用
type
pro=procedure(msg:PChar);stdcall;
var
int:integer;
say:pro;
begin
int := 0;
int := LoadLibrary('dll.dll');
// if Assigned(GetProcAddress(int, 'msg')) then ShowMessage('成功');
if int <> 0 then
begin
@say := GetProcAddress(int, 'msg');
say();
FreeLibrary(int);
end
end.

这样也是不行的
绝缘 2005-04-23
  • 打赏
  • 举报
回复
一般为了通用性,在DLL中的引出函数这样声明:

类型 WINAPI 函数名(参数表){
......
}

在Delphi中调用的时候:
function 函数名(参数表):类型;stdcall;external'DLL路径'
绝缘 2005-04-23
  • 打赏
  • 举报
回复
Delphi不用DEF文件啊。
Delphi调用DLL的方法:
function FunName(lParam:integer):integer;stdcall;external 'DllName.dll'
stdcall取决于VC写的DLL用的是什么方式:一般的WinAPI都是用的stdcall(平坦内存文式)

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧