★高手请进★:关于dll调用的几个问题........

enoloo 2003-12-16 05:24:32
1,在vc中调用dll中的函数接口可以通过h文件或者申明接口。现在用户给我一个txt文本(我以文本形式打开),里面有接口函数的定义,我在程序中怎么引用这些接口?
2,我能在vc中调用vb做的dll吗?vb怎么做引出函数?
3,和第二问一样,怎么调用delphi做的dll?要注意些什么问题?
原则上一个问题50分....
thanks.
...全文
29 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
MFCClass 2003-12-20
  • 打赏
  • 举报
回复
up
enoloo 2003-12-17
  • 打赏
  • 举报
回复
有没有用vc调用过vb或delphi dll的?


up有分.....
enoloo 2003-12-16
  • 打赏
  • 举报
回复
vb可以在def中声明导出函数,但是在vc中编译能根据def文件自动连接函数接口吗?
enoloo 2003-12-16
  • 打赏
  • 举报
回复


谢谢,继续讨论....
vcforever 2003-12-16
  • 打赏
  • 举报
回复
1、你可以根据.txt文件中提供的函数说明中了解到具体应该调用哪个函数,然后用显式加载DLL的方法调用DLL中的导出函数如:
HINSTANCE hInst = LoadLibrary("your.DLL");
if(hInst)
{
typedef BOOL (WINAPI *FUNC)(....);//定义函数指针
FUNC fun = NULL;
fun = (FUNC)GetProcAddress(hInst,"yourFucntionname");
if(fun)
fun();//通过函数指针来调用函数
FreeLibrary(hInst);//释放DLL
}
2、
在VC中可以调用VB的DLL(前提是VB做的DLL可以供其他语言开发的程序调用)
VB不太熟悉,我想也应该在一个连接文件(类似.def文件)中声明导出函数吧

3、不熟悉,不好乱发言论!
我认为调用不同语言开发的DLL应该注意参数的传递问题!
enoloo 2003-12-16
  • 打赏
  • 举报
回复
可能是我没说明白。
我要程序自动识别任何dll,但他要提供一个函数接口表。
比如是:
VOID func1 int int int
VOID func2 HDC float float

现在我程序要自动识别并调用函数func1,func2.
如果我手工做,可以
typedef void (WINAPI func*)(int,int,int);
func dll_func;
dll_func(4,5,5);

但是,程序要自动对dll识别接口(没有头文件)。
程序用变量CString s="func1"; //从提供的文件中提取出
CString arg1="int";
CString arg2="int";
CString arg3="int";
下一步怎么有s,arg1,arg2,arg3调用dll中的函数??
yifengling0 2003-12-16
  • 打赏
  • 举报
回复
就是楼上的方法阿!~

知道什么样的函数就声明什么样的函数指针就可以了吗!
enoloo 2003-12-16
  • 打赏
  • 举报
回复
呵呵,谢谢各位~
可能你们还没明白我的意思。
HINSTANCE h;
h=LoadLibrary("your.dll");
typedef int(*yourinterface)();
yourinterface your;
your=(yourinterface)GetProcAddress(h,"yourmethod");
your();
问题是:假设yourinterface(int,int),在假设我对这个dll的情况一无所知。
我只知道他按一种格式提供了一个txt文件,里面保存了所有的接口以及参数,我提取这些
比如对于一个函数char *funcname=name_funtion1;char * arg[]=args;
现在问题是,我根据这些信息(比如知道参数的类型,函数名),怎么在vc环境下调用dll中的这些函数。

能给出一些思路吗?
谢谢了,一定给分~
alphapiao 2003-12-16
  • 打赏
  • 举报
回复
我一般用楼上的方法,静态调用,适合输出参数比较复杂的函数和输出类
robinzo 2003-12-16
  • 打赏
  • 举报
回复
一种方法是将给你的函数声明写成h文件,然后在自己的工程中包含它,将dll放到系统目录下,在自己的工程中"Project->settings.."中的"Link"中添上dll对应的lib的位置,这样你就可以在自己的工程中使用别人的DLL中提供的函数了
另外一种方法就是如楼上给的,动态加载。
vb做的dll可以在vc下调用,由于vb
kof99th 2003-12-16
  • 打赏
  • 举报
回复
用显示调用
LoadLibrary
GetProcAddress
FreeLibrary
yifengling0 2003-12-16
  • 打赏
  • 举报
回复
楼上的方法很好!~~

esri 2003-12-16
  • 打赏
  • 举报
回复
HINSTANCE h;
h=LoadLibrary("your.dll");
typedef int(*yourinterface)();
yourinterface your;
your=(yourinterface)GetProcAddress(h,"yourmethod");
your();

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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