C#中 对标准C++动态库的调用
2004-06-30 10:44
459 查看
C#的标准动态库的调用
2004-06-30
微软的.net的开发规范里,公共语言规范是个重要的概念,它允许我们多种语言之间互用动态库,因此给我们提供了很大的灵活性,我们可以调用win32 的api ,或我们自己的动态库,实现功能的扩展。
在C#的语言规范中给出了符合公共规范的类型,比如在C++中的指针 对应 C#中的IntPtr, LPCTSTR 对应string 等,在msdn中用cls可以查阅,在此就不多说了。
在c++的动态库编写时,我们必须注意函数的输出方式,一般的用__declspec(dllexport) 输出时会函数会显示出长名称,不利于我们调用。 可以用 extern "C" 形式去输出函数名,或在.def文件中指定输出。
具体可以用dumpbin 命令查看。例如:
C++中的声名:
extern "C"
__declspec(dllexport)
int StartUp( LPCTSTR sLocalIp,
int LocalPort,
LPCTSTR sGWIp,
int GWPost)
C#中的声名:
namespace someApp
{
public class class1
{
public class1() {};
[DllImport("DFSAPCP.dll", CharSet=CharSet.Auto)]
public static extern int StartUp( string sLocalIp,
int LocalPort,
string sGWIp,
int GWPost);
}
}
这样可以在C#的程序中通过class1.StartUp(...)调用了。
2004-06-30
微软的.net的开发规范里,公共语言规范是个重要的概念,它允许我们多种语言之间互用动态库,因此给我们提供了很大的灵活性,我们可以调用win32 的api ,或我们自己的动态库,实现功能的扩展。
在C#的语言规范中给出了符合公共规范的类型,比如在C++中的指针 对应 C#中的IntPtr, LPCTSTR 对应string 等,在msdn中用cls可以查阅,在此就不多说了。
在c++的动态库编写时,我们必须注意函数的输出方式,一般的用__declspec(dllexport) 输出时会函数会显示出长名称,不利于我们调用。 可以用 extern "C" 形式去输出函数名,或在.def文件中指定输出。
具体可以用dumpbin 命令查看。例如:
C++中的声名:
extern "C"
__declspec(dllexport)
int StartUp( LPCTSTR sLocalIp,
int LocalPort,
LPCTSTR sGWIp,
int GWPost)
C#中的声名:
namespace someApp
{
public class class1
{
public class1() {};
[DllImport("DFSAPCP.dll", CharSet=CharSet.Auto)]
public static extern int StartUp( string sLocalIp,
int LocalPort,
string sGWIp,
int GWPost);
}
}
这样可以在C#的程序中通过class1.StartUp(...)调用了。
相关文章推荐
- 使用了非托管的第三方库的c++动态库在c#中的调用
- C#调用C/C++动态库的参数传递---数组指针的传递
- C#调用使用C++\CLI封装的标准C++ DLL问题:无法访问受保护的内存,这通常指示其他内存已损坏
- c#调用c++动态库的一些理解
- C++动态库返回char*C#调用失败问题
- C#调用C++动态库如何接收C++数据类型为char*
- C#调用C++动态库
- C#总结(五)调用C++动态库(类型对照)
- C++与C#有关对库(动态库dll,静态库.lib)文件的调用
- Unity3D中C#调用C++动态库总结
- C#调用C++动态库接口
- c#.net下成功调用c++编写的标准dll
- c#调用c++动态库的一些理解
- c# 调用c/c++ 动态库的办法
- C#调用C/C++动态库,封装各种复杂结构体。
- C#调用C++动态库并回调C#函数
- c#调用c++动态库
- C# .net写的程序调用C++.net写的动态库,装载失败
- C#调用C++动态库并回调C#函数
- C#调用C++动态库