标题:C 中隐式调用DLL 怎么还没有vfp 中简单呢
只看楼主
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
结帖率:99.76%
已结贴  问题点数:100 回复次数:5 
C 中隐式调用DLL 怎么还没有vfp 中简单呢
我再c中 用extern "C" __declspec(dllexport) int 编译了一个dll 并没有编写头文件(默认倒是生成了一个lib ,dll)

这样再vfp中 很容易调用成功
程序代码:

Declare LONG datediff IN "mydll.dll" LONG, LONG, LONG,LONG,LONG,LONG

t=datediff(1976,1,23,2019,2,12)
?t


好吗,问题来了,再c中调用我的dll中的函数吧  因为没有点h头文件  隐式调用 居然不知道如何调用了

看网上代码  都是 包含 xxx.h 引入xxx.lib, 好问题又来了,我既然有头文件和lib库  我还要你dll 作甚

[此贴子已经被作者于2019-2-12 15:04编辑过]

搜索更多相关主题的帖子: 隐式 调用 DLL vfp LONG 
2019-02-12 10:38
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:50 
好吗,问题来了,再c中调用我的dll中的函数吧  因为没有点h头文件  显式调用 居然不知道如何调用了
那你应该和vfp一样,自己写出来,即:
    long datediff( long, long, long, long, long, long );
当然,vfp中信息不全,不知道是 __stdcall 还是 __cdecl,不知道要不要加 extern "C",不知道要不要加 __declspec(dllimport) ?




2019-02-12 12:40
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:50 
头文件的作用就是引入库文件和声明库文件中的函数,lib和dll库文件的用途一样,引入方式和编译结果不同。lib会和程序文件一起编译,成为程序文件的一部分,dll文件独立于程序文件,发布时必须和程序文件一起发布,程序文件只在运行时把dll加载进内存。

能编个毛线衣吗?
2019-02-12 15:07
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
以下是引用wmf2014在2019-2-12 15:07:04的发言:

头文件的作用就是引入库文件和声明库文件中的函数,lib和dll库文件的用途一样,引入方式和编译结果不同。lib会和程序文件一起编译,成为程序文件的一部分,dll文件独立于程序文件,发布时必须和程序文件一起发布,程序文件只在运行时把dll加载进内存。


这些我都知道,现在的问题是:
1、我把一个单独的dll 送给vfp 并告知函数参数及返回值 那么vfp就能够使用该dll中的函数
反之,
2、我把一个单独的dll送给c 它却告诉我无法使用,还需要提供.h .lib

我到网上反复搜索 得到的结论就是 如果只有dll 那么只能显式调用( LoadLibrary与GetProcAddress)

[此贴子已经被作者于2019-2-12 15:29编辑过]


DO IT YOURSELF !
2019-02-12 15:20
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
以下是引用rjsp在2019-2-12 12:40:07的发言:

那你应该和vfp一样,自己写出来,即:
    long datediff( long, long, long, long, long, long );
当然,vfp中信息不全,不知道是 __stdcall 还是 __cdecl,不知道要不要加 extern "C",不知道要不要加 __declspec(dllimport) ?

vfp 中可以指明我到哪个dll中去找哪个函数 (这莫非是vfp使用了LoadLibrary与GetProcAddress 进行了显式调用,如果这样 那就没必要进行比较了)
而c中 直接 long datediff( long, long, long, long, long, long );这样写,它却不知道到哪里去找 还是需要lib h 或者 进行显式调用(LoadLibrary与GetProcAddress)

DO IT YOURSELF !
2019-02-12 15:26
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:0 
那没办法,动态链接库需要程序运行时加载,像vfp这类语言一句代码就加载并声明了函数,c语言显式加载大概只有自己调用api加载吧,熟练了应该差不多。

能编个毛线衣吗?
2019-02-12 16:09



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-493037-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.440753 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved