c++建立DLL 及c# 调用

1,C++建立一个标准DLL

在VC++中new一个Win32 Dynamic-Link Library工程,在建立的工程中添加lib.h及lib.cpp文件,

[cpp]  view plain copy
  1. /* 文件名:lib.h */  
  2.   
  3. #ifndef LIB_H  
  4. #define LIB_H  
  5. extern "C" int __declspec(dllexport)add(int *x, int *y);  
  6. #endif  
  7.   
  8. /* 文件名:lib.cpp */  
  9.   
  10. #include "lib.h"  
  11. int add(int *x, int *y)  
  12. {  
  13.  return *x + *y;  
  14. }  

其中extern "C" int __declspec(dllexport)add(int x, int y);声明函数add为DLL的导出函数。

2,c#中调用

[c-sharp]  view plain copy
  1. //声明  
  2.         [DllImport(@"./lib.dll")]  
  3.         private static extern int add(ref int a,ref  int b);  
  4. //调用  
  5.             int a = 10,b=20;  
  6.             int int0 = add(ref a,ref b);  
  7.             textBox1.Text = int0.ToString();  

附录A:

c++工程里调用dll

 

1,LoadLibrary("...dll");加载DLL

2,addFun = (lpAddFun)GetProcAddress(hDll, "add");//lpAddFun addFun; //函数指针     //DLL函数地址获取

3,FreeLibrary(hDll);//释放

附录B:

静态链接库
VC++6.0中new一个名称为libTest的static library工程,并新建lib.h和lib.cpp两个文件
//文件:lib.h

#ifndef LIB_H
#define LIB_H
extern "C" int add(int x,int y);   //声明为C编译、连接方式的外部函数
#endif

//文件:lib.cpp

#include "lib.h"
int add(int x,int y)
{
 return x + y;

标准Turbo C2.0中的C库函数(我们用来的scanf、printf、memcpy、strcpy等)就来自这种静态库。

静态链接库的调用
#include <stdio.h>
#include "../lib.h"
#pragma comment( lib, "..//debug//libTest.lib" )  //指定与静态库一起连接

int main(int argc, char* argv[])
{
 printf( "2 + 3 = %d", add( 2, 3 ) );

}

你可能感兴趣的:(c++建立DLL 及c# 调用)