C# 调用C++或者C的DLL
2015-05-25 17:13
162 查看
本文将讲诉我最近使用C#来调用C++或者C的DLL的一个使用过程:
C#与C++的类型转换
简单的使用
回调函数
我遇到的问题
LPCTSTR ——— StringBuilder
LPCWSTR ——— IntPtr
handle———IntPtr
hwnd———–IntPtr
char *———-string
char**———-IntPtr
int * ———–ref int
int &———–ref int
void *———-IntPtr
unsigned char *—–ref byte
Struct需要在C#里重新定义一个Struct
int __stdcall FunctionName(unsigned char param1, unsigned short param2)
[DllImport(“ COM DLL path/file ”)]
extern static int FunctionName(byte param1, ushort param2)
注意在每个函数的前面加上public static extern +返回的数据类型,如果不加public ,函数默认为私有函数,调用就会出错。
C#与C++的类型转换
简单的使用
回调函数
我遇到的问题
C#与C++的类型转换
BSTR ——— StringBuilderLPCTSTR ——— StringBuilder
LPCWSTR ——— IntPtr
handle———IntPtr
hwnd———–IntPtr
char *———-string
char**———-IntPtr
int * ———–ref int
int &———–ref int
void *———-IntPtr
unsigned char *—–ref byte
Struct需要在C#里重新定义一个Struct
简单的使用
例如C++的原有函数是:
int __stdcall FunctionName(unsigned char param1, unsigned short param2)
其中的参数数据类型在C#中,必须转为对应的数据类型。如:
[DllImport(“ COM DLL path/file ”)]
extern static int FunctionName(byte param1, ushort param2)
回调函数
CallBack回调函数需要封装在一个委托里,delegate static extern int FunCallBack(string str);注意在每个函数的前面加上public static extern +返回的数据类型,如果不加public ,函数默认为私有函数,调用就会出错。
我遇到的问题
在使用过程主要就是出现了accessviolationexception(尝试读取或写入受保护的内存。这通常指示其他内存已损坏。)异常:这个异常的发生其实与自己设定的参数类型有关,我使用的时候把char**—- ref string,这样是错误的。正确:[char**----ref IntPrt]
相关文章推荐
- c# 调用c++dll挂钩其他程序线程或者进程
- 在C++创建DLL,以及使用C++或者C#分别调用DLL中的方法
- C++通过DLL调用C#代码
- 用C#调用C++dll
- 在c#里调用C++的dll时,需要注意的一些问题
- 综合项目之闪讯破解(四)之 如何用C++编写可被C#调用的Dll
- 综合项目之闪讯破解(五)之 如何用C#调用C++编写的Dll
- C#调用C++的DLL搜集整理的所有数据类型转换方式
- 【c++】C#调用C++ DLL 托管方式
- C#调用C++的dll
- C# 调用 c++ dll 的一些问题总结
- C# 调用 C++ DLL 操作说明
- C#调用C++DLL
- C# 调用 C++ dll 的一些问题
- c#窗口调用C++DLL
- C# 调用C++dll 引发DllNotFoundException
- C#调用C++的dll
- C#调用C/C++动态链接库(.dll)详解
- c++ c# java 调用 c++ 写的dll
- C#调用C++DLL总结