静态链接库文件封装成DLL后调用问题,高手请进!!!
在我的项目中要将第三方RSA的认证集成到项目中,该认证产品提供有SDK包。由静态链接文件(ace_api.lib)
和头文件(apiuser.h)组成。但在C#中只可调用动态链接库,所以在VC中将其封装。
函数原型:
extern int Sd_ApiInit(char *serverDb,char *logDb,char *mode,char *msgBuf,int bufSize);
具体如下:
1、在项目中静态引用lib文件。
2、将apiuser.h文件加入到HeadFiles中。
3、在主程序中敲入下面的代码:
#include "apiuser.h"
//声明apiuser.h中要封装的函数:
int ApiInit(char *serverDb,char *logDb,char *mode,char *msgBuf,int bufSize)
{
int result=Sd_ApiInit(serverDb,logDb,mode,msgBuf,bufSize);
return result;
}
......
......
4、在项目的.def文件中写入要封装的函数:
EXPORTS
ApiInit @1
...... @2
...... @2
5、编译。生成win32dll.dll。
这下,所需的动态链接库文件就生成了。可在C#中使用了。
将编译成功的dll复制至项目输出文件夹下(bin\Debug目录下)
在项目中就可调用了。
代码如下
using System.Runtime.InteropServices
......
[DllImport("win32dll")]
private static extern int ApiInit(string serdb,string logdb,string defser,string msgbuf,int
bufSize);
.....
//调用
pivate void button1_OnClick(object sender,System.EventArgs e)
{
string msg="";
int result=ApiInit("","","1",msg,4096);
MessageBox.Show(result.toString());
......
}
编译执行,执行后单击按钮后程序直接就退出了。但将传递的参数bufSize的值改为其它数值,如ApiInit("","","1",msg,12),会弹出错误代码为1,调用正确,因为传递了错误的参数,但传递正确的参数为何报错?
1、是不是我封装的动态链接库文件有问题?
2、还是函数引用不对?
请高手指点!!!
下面是SDK开发包中带的开发示例中引用这个函数的一部分代码:
#ifndef MAX_RESULT_MSG_SIZE
#define MAX_RESULT_MSG_SIZE 4096 /* Should be in all your applications!!! */
#endif
......
char buffer[MAX_RESULT_MSG_SIZE] = {0};
......
......
error = Sd_ApiInit("","","1", buffer, MAX_RESULT_MSG_SIZE);
下面是函数的使用说明:
和头文件(apiuser.h)组成。但在C#中只可调用动态链接库,所以在VC中将其封装。
函数原型:
extern int Sd_ApiInit(char *serverDb,char *logDb,char *mode,char *msgBuf,int bufSize);
具体如下:
1、在项目中静态引用lib文件。
2、将apiuser.h文件加入到HeadFiles中。
3、在主程序中敲入下面的代码:
#include "apiuser.h"
//声明apiuser.h中要封装的函数:
int ApiInit(char *serverDb,char *logDb,char *mode,char *msgBuf,int bufSize)
{
int result=Sd_ApiInit(serverDb,logDb,mode,msgBuf,bufSize);
return result;
}
......
......
4、在项目的.def文件中写入要封装的函数:
EXPORTS
ApiInit @1
...... @2
...... @2
5、编译。生成win32dll.dll。
这下,所需的动态链接库文件就生成了。可在C#中使用了。
将编译成功的dll复制至项目输出文件夹下(bin\Debug目录下)
在项目中就可调用了。
代码如下
using System.Runtime.InteropServices
......
[DllImport("win32dll")]
private static extern int ApiInit(string serdb,string logdb,string defser,string msgbuf,int
bufSize);
.....
//调用
pivate void button1_OnClick(object sender,System.EventArgs e)
{
string msg="";
int result=ApiInit("","","1",msg,4096);
MessageBox.Show(result.toString());
......
}
编译执行,执行后单击按钮后程序直接就退出了。但将传递的参数bufSize的值改为其它数值,如ApiInit("","","1",msg,12),会弹出错误代码为1,调用正确,因为传递了错误的参数,但传递正确的参数为何报错?
1、是不是我封装的动态链接库文件有问题?
2、还是函数引用不对?
请高手指点!!!
下面是SDK开发包中带的开发示例中引用这个函数的一部分代码:
#ifndef MAX_RESULT_MSG_SIZE
#define MAX_RESULT_MSG_SIZE 4096 /* Should be in all your applications!!! */
#endif
......
char buffer[MAX_RESULT_MSG_SIZE] = {0};
......
......
error = Sd_ApiInit("","","1", buffer, MAX_RESULT_MSG_SIZE);
下面是函数的使用说明:
...全文
相关推荐
dll文件封装成OCX控件
"这篇文档介绍了如何使用Visual C++ 6.0将DLL文件封装成OCX控件,涉及了静态和动态调用DLL的方法,并通过一个具体的例子详细讲解了动态调用DLL的封装过程,包括创建项目、添加接口函数
c++ 创建动态链接库dll并调用
在C++编程中,动态链接库(DLL,Dynamic Link Library)是一种重要的技术,它允许将代码和数据封装在单独的可加载模块中,以便多个应用程序可以共享这些资源。
c# dll封装以及调用
在.NET框架中,C# DLL封装与调用是常见的编程实践,它允许我们将代码组织成可重用的库,方便在多个项目之间共享。DLL(动态链接库)是一种包含可由多个程序同时使用的函数和资源的文件。
QT动态链接库(DLL)的创建和调用
通过理解以上步骤和注意事项,开发者可以有效地创建和使用QT动态链接库,从而在项目中实现代码复用,提高开发效率。同时,掌握DLL的调用方法也能帮助解决多进程间的通信和资源共享问题。
C#中如何调用动态链接库DLL
### C#中调用动态链接库DLL的知识点详解#### 一、动态链接库(DLL)简介**动态链接库**(Dynamic Link Library,简称DLL)是Microsoft Windows系统中的一个重要组成部分


