在C#中调用C++Builder编写的DLL
2007-04-24 17:30
519 查看
一建立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的单击代码事件如下。
[align=left]private void button1_Click(object sender, EventArgs e)[/align]
[align=left] { [/align]
[align=left] try[/align]
[align=left] {[/align]
[align=left] MessageBox.Show(add(3, 5).ToString());//要调用的函数[/align]
[align=left] }[/align]
[align=left] catch (Exception ee)[/align]
[align=left] {[/align]
[align=left] MessageBox.Show(ee.ToString());[/align]
[align=left] }[/align]
[align=left] }[/align]
[align=left]3 在private void button1_Click(object sender, EventArgs e)一行的上面添加如下代码。[DllImport("AddDll.dll")]
static extern int count(int init);[/align]
[align=left]4 把AddDll.dll复制到项目的bin/Debug文件夹中,编译调试程序即可。[/align]
[align=left]在调用过程中,如果函数需要返回char* , int* 等参数,可以使用int*->IntPtr char* -> StringBuilder。即在C#中IntPtr等价于C++中的int * ,而StringBuilder等价于C++中的char*变量。如果参数是传进char*参数,用string是可以的,如果是传出的话,用StringBuilder。[/align]
[align=left]举例如下。[/align]
[align=left]1 CB动态连接库[/align]
[align=left]extern "C" __declspec(dllexport) char* PCName()[/align]
[align=left]{ [/align]
[align=left] char buf[255];[/align]
[align=left] unsigned long int len=255;[/align]
[align=left] if(GetComputerName(buf,&len)) //注意,buf需要的是一个缓冲区。不可以使用AnsiString.C_str()来代替,否则在下面的C#调用中会出错。[/align]
[align=left] {[/align]
[align=left] AnsiString pcname=buf;[/align]
[align=left] return pcname.c_str();[/align]
[align=left] }[/align]
[align=left] else[/align]
[align=left] return "Error;";[/align]
[align=left]}[/align]
[align=left]2 C#中调用过程如下。[/align]
[align=left]try[/align]
[align=left]{[/align]
[align=left]StringBuilder str = _PCName();[/align]
[align=left]MessageBox.Show(Convert.ToString(str));[/align]
[align=left]}[/align]
[align=left]catch (Exception ee)[/align]
[align=left]{[/align]
[align=left]MessageBox.Show(ee.ToString());[/align]
[align=left]}[/align]
相关文章推荐
- 非托管C++代码调用C#编写的dll方法
- C#调用C++编写的COM DLL
- JS调用c#编写的DLL
- BCB(C++Builder或Embarcadero XE)中调用托管DLL的方法(C++调用C#的DLL)
- com调用的几种方法 及 C#调用C++编写的的COM DLL收藏
- C#调用C++编写的COM DLL
- C++如何调用C#编写的DLL
- C#如何调用C++编写的dll中的导出类
- Delphi调用C# 编写dll动态库
- 非托管C++代码调用C#编写的dll方法
- vs2010下V C++调用C#编写的dll时可能遇到的问题
- C#调用mstscax.dll编写远程桌面
- 在C#.net中调用VC 6.0编写的DLL文件
- C++32 调用 C# 64编写的dll
- Java中调用C#编写的dll
- C#调用C++编写的COM DLL
- 求教,c#如何调用delphi编写的dll中的函数
- 存储过程调用C#编写的DLL文件
- 综合项目之闪讯破解(四)之 如何用C++编写可被C#调用的Dll
- 转:C# .NET中调用VB编写的DLL代码事例(我做了些修改)