【VC++开源代码栏目提醒】:网学会员为需要VC++开源代码的朋友们搜集整理了c#调用C++类库 - 编程语言相关资料,希望对各位网友有所帮助!
C调用C写的dllC调用C的dll 收藏 C语言使用方便入门门槛较代上手容易并且语法与Cjava有很类似的地方IDE做的也好通用性好是MS下一代开发的主要力量.但是其开源代码较少类库不是十分完美在架构方面还有一些需要做的工作. C写的程序占用内存较小直接对内存或者文件操作因此一些关键的步骤或者一些最内层的循环在一定程序上还需要依赖C. 下面我做一些简单的例子 第一步用C做一个可以导出函数的dll不采用def文件 cxyMath.h //在这里定义导出哪一些函数 class MyMathFuncs ... public: // Returns a b static __declspecdllexport double Adddouble a double b // Returns a - b static __declspecdllexport double Subtractdouble a double b // Returns a b static __declspecdllexport double Multiplydouble a double b // Returns a / b // Throws DivideByZeroException if b is 0 static __declspecdllexport double Dividedouble a double b cxyMath.cpp的实现就很简单了代码附在上传的文件中在这里就不贴代码了编译成dll后拷贝dlllib文件到C的工程中的debug的目录下如果你写的是release版请将dlllib拷贝到relase文件夹下 第二步:找出导出的函数名 写成如下形式方便CS的调用 不采用def文件导出的函数名有些奇怪但还是可以看出函数的层次函数名类名命名空间 找函数名可以使用ultraedit32打开lib文件就可看到了 另外我们可以使用dllexp这个程序找出导出的函数这个程序见附录 DllImportcppdll.dllEntryPointDivideMyMathFuncsMathFuncsSANNNZCharSet CharSet.Auto public static extern double Dividedouble adouble b DllImportcppdll.dllEntryPointMultiplyMyMathFuncsMathFuncsSANNNZCharSet CharSet.Auto public static extern double Multiplydouble adouble b 第三步调用 private void button1_Clickobject sender System.EventArgs e ... MessageBox.ShowMultiply1213.ToString 采用def 文件导出函数 第一种方式比较简单但是找一个dll函数的入口地址还是比较麻烦的并且入口地址没有太大的意义不直观不好记忆 一般情况下我们可以选择使用def文件导出函数 第一步新建一个win32 application然后在应用程序的设置中选择动态dll然后选择导出符号这样vs2003就为我们生成了一个非常完整的架子但是美中不足的是生成的dll导出的函数也是和第一中情况一样 第二步添加一个def文件生成def文件的同时vs2003自动为我们添加了这样一行 LIBRARY win32dll 我们只要在他的下面加上我们要导出的函数就可以了. GetAName 1 ShowMyName 2 PerfTest 3 这样经过编译我们使用dllexp查看看到的就不再是一些没有意义的函数名了而是我们在def中定义的文件函数名 第三步拷贝libdll文件到CS工程中就可以了 我们就不在这里一一叙述了 刚才我们写的dll同样也可以为C的工程调用 第一步:新建一个console的C application 第二步:添加引用引用C dll application 第三步:拷贝c dll的.h文件到console app的目录下并添加到console app中 第四步:include cxyMath.h 调用就可以了 详情见代码 C调用C生成的dll例子文件中共包含四个工程文件: cppdll是不使用def文件导出dll函数的示例 win32dll是使用def文件导出dll函数的示例 CsApp是C一个工程文件用来调用C的dll dlltest是C调用Cdll的一个示例 代码:http://dl2.csdn.net/down4/20070725/25180037196.rar dllexp:查看dll导出的一个小程序 http://www.nirsoft.net/utils/dll_export_viewer.html 本文来自CSDN博客转载请标明出处http://blog.csdn.net/sunbingzibo/archive/2007/07/25/1707656.aspx C 中调用C DLL P/Invoke 为了能用上原来的C代码只好研究下从C 中调用DLL 首先必须要有一个声明使用的是DllImport关键字 包含DllImport所在的名字空间 using System.Runtime.InteropServices public class XXXX DllImport“MyDLL.dll public static extern int mySum int aint b DllImport“MyDLL.dll public static extern int mySum int aint b 代码中DllImport关键字作用是告诉编译器入口点在哪里并将打包函数捆绑在这个类中 在调用的时候 在类中的时候 直接 mySumab就可以了 在其他类中调用: XXXX. mySumab DllImport“MyDLL.dll”在申明的时候还可以添加几个属性 DllImport“MyDLL.dll EntryPoint mySum CharSetCharSet.AutoCallingConventionCallingC 文件: PInvoke.rar 大小: 2790KB 下载: 下载 onvention.StdCall EntryPoint: 指定要调用的 DLL 入口点。