怎么写的动态库需要调用别的动态库
答案:2 悬赏:30 手机版
解决时间 2021-02-04 23:16
- 提问者网友:温柔港
- 2021-02-03 23:05
怎么写的动态库需要调用别的动态库
最佳答案
- 五星知识达人网友:一秋
- 2021-02-03 23:35
动态调用的时候指针名不需要和原DLL中函数一样。基本过程是这样的:
HMUDOLE hmodle=GetMuduleHandle("你要使用的DLL名字");
PROC fun=(PROC)GetProcAddress(hmodule,"DLL中函数名");
然后将fun转换成你的函数形式,比如你要调用的DLL中函数是
int myfun(int a,int b){。。。}
你可以这样转换:
typedef int (*MYFUN)(int a,int b);
(MYFUN)fun(10,20);//然后这样调用
函数指针和函数名都是一个指向函数入口地址的指针,函数入口地址是一个4字节类型的值而已,函数指针指示一个保存这个值的变量而已,名字只要合法就行,不需要和所指向的函数名一样,而且,编译后就没函数名这概念了。
HMUDOLE hmodle=GetMuduleHandle("你要使用的DLL名字");
PROC fun=(PROC)GetProcAddress(hmodule,"DLL中函数名");
然后将fun转换成你的函数形式,比如你要调用的DLL中函数是
int myfun(int a,int b){。。。}
你可以这样转换:
typedef int (*MYFUN)(int a,int b);
(MYFUN)fun(10,20);//然后这样调用
函数指针和函数名都是一个指向函数入口地址的指针,函数入口地址是一个4字节类型的值而已,函数指针指示一个保存这个值的变量而已,名字只要合法就行,不需要和所指向的函数名一样,而且,编译后就没函数名这概念了。
全部回答
- 1楼网友:天凉才是好个秋
- 2021-02-03 23:43
你这个是c++的dll用c#来调用吧
看看这个例子吧
使用c#时不免用调用别的dll,如win32的api和自己以前做的dll,包括不同语言之间的的dll
c#调用dll很像vb,下面讨论的c#调用dll的方式。
看看下面的例子,演示了怎么定义dll函数接口
public class utility
{
[dllimport("kernel32",
entrypoint="createdirectory",
callingconvention=callingconvention.stdcall)]
public static extern bool create (string name);
[dllimport("user32",
entrypoint="messagebox",
callingconvention=callingconvention.stdcall)]
public static extern int msgbox (string msg);
}
class myclass
{
public static int main()
{
string mystring;
console.write("enter your message: ");
mystring = console.readline();
return utility.msgbox(mystring);
}
}
值得注意的是,缺省的调用规则(callingconvention)是stdcall,同winapi,在
c++里是__stdcall的形式,函数入口(entrypoint)缺省是同名,如createdirectory
的定义也可以为
[dllimport("kernel32")]
static extern bool createdirectory(string name, securityattributes sa);
win32 api原型为
bool createdirectory(
lpctstr lppathname, // directory name
lpsecurity_attributes lpsecurityattributes // sd
);
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯