在C#中调用C++Builder编写的DLL
来源:互联网 发布:ni80 发热丝数据 编辑:程序博客网 时间:2024/05/01 22:42
一建立DLL文件
1 运行C++Builder6,新建一DLLWizard项目;
2 保存文件为Main.cpp以及工程文件AddDll.bpj;
3 新建一Unit,保存为Fun
Fun.h文件如下。
#ifndef FunH
#define FunH
//---------------------------------------------------------------------------
extern "C" __declspec(dllexport) __stdcall int add(int a,int b);
#endif
Fun.cpp文件如下。
#pragma hdrstop
#include "Fun.h"
//---------------------------------------------------------------------------
extern "C" __declspec(dllexport) __stdcall int add(int a,int b)
{
return (a+b);
}
#pragma package(smart_init)
4 按快捷键Ctrl+F9,编译工程,生成Dll文件AddDll.dll。
二在C#中调用AddDll.dll文件。
1 新建一C#工程(Windows应用程序),向Form1 中添加一Button按钮button1,
2. 导入命名空间: using System.Runtime.InteropServices;
2 button1的单击代码事件如下。
private void button1_Click(object sender, EventArgs e)
{
try
{
MessageBox.Show(add(3, 5).ToString());//要调用的函数
}
catch (Exception ee)
{
MessageBox.Show(ee.ToString());
}
}
3 在private void button1_Click(object sender, EventArgs e)一行的上面添加如下代码。[DllImport("AddDll.dll")]
static extern int count(int init);
static extern int count(int init);
4 把AddDll.dll复制到项目的bin/Debug文件夹中,编译调试程序即可。
在调用过程中,如果函数需要返回char* , int* 等参数,可以使用int*->IntPtr char* -> StringBuilder。即在C#中IntPtr等价于C++中的int * ,而StringBuilder等价于C++中的char*变量。如果参数是传进char*参数,用string是可以的,如果是传出的话,用StringBuilder。
举例如下。
1 CB动态连接库
extern "C" __declspec(dllexport) char* PCName()
{
char buf[255];
unsigned long int len=255;
if(GetComputerName(buf,&len)) //注意,buf需要的是一个缓冲区。不可以使用AnsiString.C_str()来代替,否则在下面的C#调用中会出错。
{
AnsiString pcname=buf;
return pcname.c_str();
}
else
return "Error;";
}
2 C#中调用过程如下。
try
{
StringBuilder str = _PCName();
MessageBox.Show(Convert.ToString(str));
}
catch (Exception ee)
{
MessageBox.Show(ee.ToString());
}
- 在C#中调用C++Builder编写的DLL
- C#中如何调用C++编写的DLL
- C#中如何调用C++编写的DLL
- C#中如何调用C++编写的DLL
- C#中如何调用C++编写的DLL
- 在C#中调用VC编写的dll库
- 在C#中调用VC编写的dll库
- 如何在MFC中调用C#编写的DLL
- 在C#中如何调用C++编写的DLL
- 在C#中调用VC编写的dll库
- 在java中调用C#编写的dll
- 在Delphi中调用C语言编写的DLL
- 编写C#调用的C++DLL
- 编写C#调用的C++DLL
- 编写C#调用的C++DLL
- BCB(C++Builder或Embarcadero XE)中调用托管DLL的方法(C++调用C#的DLL)
- MFC中调用C#编写的DLL
- C#中调用C++编写的Dll
- asp.net常用函数
- Ubuntu java 更新
- 获取文件的绝对路径
- checkbox 判断同一行的值是否相同
- left join,inner join,right join,cross join,full join的区别[转载]
- 在C#中调用C++Builder编写的DLL
- VC用鼠标画圆圈
- ASP.NET相关问题14问
- 深圳各区镇邮政编码查询表
- 读书摘要——《凌波微步-软件开发警戒案例集》
- 电脑操作最忌讳的18个小动作
- JavaScript代码收集
- Route 命令摘抄
- 白领职场谈薪酬技巧支招