c语言调用dll里的命令并输出

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言调用dll里的命令并输出相关的知识,希望对你有一定的参考价值。

#include <WINDOWS.H>
#include <WINBASE.H>
typedef void (*MYPROC)(char*);

void main()
HINSTANCE LibHandle;
MYPROC ProcAdd;
char sysbuf[] = "GetNum"; /*过程名*/

LibHandle = LoadLibrary("GetNum.dll"); /*载入dll*/

ProcAdd = (MYPROC)GetProcAddress(
LibHandle, sysbuf); /*获取函数sysbuf的地址*/


我有一个dll文件叫GetNum.dll,里面有个命令GetNum,怎样输出这个命令的结果

根据我的猜测,有两种情况
1.如果 void GetNum(char* s);是把输入的字符储存在 *s中的话:
#include <WINDOWS.H>    
#include <WINBASE.H>
#include <stdio.h>    
typedef void (*MYPROC)(char*); /* 这里要与GetNum的返回值和参数 对应 */
void main()
   HINSTANCE LibHandle;
   MYPROC ProcAdd; 
   char ch;    
   char sysbuf[] = "GetNum";   /*过程名*/
   LibHandle = LoadLibrary("GetNum.dll"); /*载入dll*/ 
   
   ProcAdd = (MYPROC)GetProcAddress(   
   LibHandle, sysbuf);   /*获取函数sysbuf的地址*/
   ProcAdd(&ch);    
   printf("%c\\n",ch);


2.如果你的GetNum是
int GetNum(char* s)

    int i=0,ans=0;
    while(s[i]>='0'&&s[i]<='9')
    
        ans=s[i]-'0'+ans*10;
    
    return ans;


#include <WINDOWS.H>    
#include <WINBASE.H>
#include <stdio.h>    
typedef int  (*MYPROC)(char*);           /*   改 */
void main()
   HINSTANCE LibHandle;
   MYPROC ProcAdd; 
   char s[100];                        /*   改 */
   char sysbuf[] = "GetNum";   /*过程名*/
   LibHandle = LoadLibrary("GetNum.dll"); /*载入dll*/ 
   
   ProcAdd = (MYPROC)GetProcAddress(   
   LibHandle, sysbuf);   /*获取函数sysbuf的地址*/
   scanf("%s",s);                    /*   改 */
   printf("%d\\n", ProcAdd(&s) );        /* 这里调用 并输出结果 */

参考技术A GetNum.dll只是一个链接库,,你只能调用接口函数。看来你还不懂怎么调用动态链接库 参考技术B (*ProcAdd)("string");

函数指针的一个应用而已追问

都没有输出

追答

你知道 函数GetNum是干嘛用的?

为什么要有输出呢?

追问

函数GetNum得到一个数字,我想输出它

追答

typedef void (*MYPROC)(char*);

改成typedef int (*MYPROC)(char*);

int x=(*ProcAdd)(参数);

printf("%d",x);

我100%肯定,上述代码不是你自己写的

追问

是的,改成c++版本要怎样改

追答

C跟C++有区别吗?

易语言怎么调用C写的DLL

SetWindowHookEx是这个函数······

参考技术A C#编写后的代码是基于CLR公共语言运行库上的,是不同于C++输出的传统DLL,所以不能被易语言中调用,你所列的方法是适用于传统VC++输出的DLL,如API 参考技术B 太简单了...帅哥啊,还认识我不,怎么这种问题是你能问出来的呵呵. SetWindowsHookEx是Api呀,在Kernel32.dll导出,我给你找个例子. .DLL命令 API_SetWindowsHookEx, 整数型, "user32", "SetWindowsHookExA", 安装钩子过程 .参数 idHook, 整数型, , .参数 lpfn, 整数型, , .参数 hmod, 整数型, , .参数 dwThreadId, 整数型, , 复制到DLL命令就好了. 参考技术C 首先你要知道这个DLL的函数和参数 然后放到同一目录 在易语言里声明 就和调用易语言的DLL一样了

以上是关于c语言调用dll里的命令并输出的主要内容,如果未能解决你的问题,请参考以下文章

c语言怎么调用dll文件?

C语言编写dll并调用

C语言写的程序,帮改成DLL

c#调用C、C++编写的dll

我用VB调用dll函数,该函数的输出参数为byte* buffer,如何把缓冲数据读出来,急啊!谢谢了

易语言dll命令调用