C#与C++混合编程

简介: C#与C++混合编程

C# Winform调用win32 C++动态链接库,假设当前有VC++编译器生成的动态库文件testdll.h,testdll.lib和testdll.dll。使用前必须把相应的C++动态库拷贝到工程.exe输出的目录下。


一、.h头文件如下:


#ifdef TESTDLL_EXPORTS

#define TESTDLL_API __declspec(dllexport)

#else

#define TESTDLL_API __declspec(dllimport)

#endif

// 此类是从 testdll.dll 导出的

class TESTDLL_API Ctestdll {

public:

Ctestdll(void);

public:

int Add(int a, int b) {return a+b;}

int Sub(int a, int b) {return a-b;}

int Mul(int a, int b) {return a*b;}

};

extern TESTDLL_API int ntestdll;

TESTDLL_API int fntestdll(void);


二、C#源码如下:


using System;

using System.Runtime.InteropServices;//System.Runtime.InteropServices一般用其DllImport调用windows的DLL函数(Windows API)或调用自用C++写的DLL函数


namespace WindowsFormsApplication2

{

   class Ctestdll

   {

       [DllImport("testdll.dll", EntryPoint = "?Add@Ctestdll@@QAEHHH@Z", CharSet = CharSet.Auto)]//"EntryPoint"的值请使用微软工具DEPENDS.EXE查看。

       private static extern int Add(int a, int b);

       public int myAdd(int a, int b)

       {

           return Add(a, b);

       }


       [DllImport("testdll.dll", EntryPoint = "?Sub@Ctestdll@@QAEHHH@Z", CharSet = CharSet.Auto)]

       private static extern int Sub(int a, int b);

       public int mySub(int a, int b)

       {

           return Sub(a, b);

       }


       [DllImport("testdll.dll", EntryPoint = "?Mul@Ctestdll@@QAEHHH@Z", CharSet = CharSet.Auto)]

       private static extern int Mul(int a, int b);

       public int myMul(int a, int b)

       {

           return Mul(a, b);

       }


       [DllImport("pci9030dll.dll", EntryPoint = "?PMC400_Initial@@YAHXZ", CharSet = CharSet.Auto)]

       private static extern int PMC400_Initial();

       public int myPMC400_Initial()

       {

           return PMC400_Initial();

       }

   }

}



相关文章
|
6月前
|
数据处理 C# C++
如何使用C#和C++结构体实现Socket通信
如何使用C#和C++结构体实现Socket通信
262 0
|
C# 开发工具 C++
简单C#类转非托管C++
简单C#类转非托管C++
|
19天前
|
C++ Python
探索Python与C/C++混合编程的艺术
探索Python与C/C++混合编程的艺术
26 1
|
2月前
|
物联网 C# C语言
物联网开发中C、C++和C#哪个更好用
在物联网(IoT)开发中,C、C++和C#各有优缺点,适用场景不同。C语言性能高、资源占用低,适合内存和计算能力有限的嵌入式系统,但开发复杂度高,易出错。C++支持面向对象编程,性能优秀,适用于复杂应用,但学习曲线陡峭,编译时间长。C#易于学习,与.NET框架结合紧密,适合快速开发Windows应用,但性能略低,平台支持有限。选择语言需根据具体项目需求、复杂性和团队技术栈综合考虑。
|
2月前
|
Java Android开发 C++
🚀Android NDK开发实战!Java与C++混合编程,打造极致性能体验!📊
在Android应用开发中,追求卓越性能是不变的主题。本文介绍如何利用Android NDK(Native Development Kit)结合Java与C++进行混合编程,提升应用性能。从环境搭建到JNI接口设计,再到实战示例,全面展示NDK的优势与应用技巧,助你打造高性能应用。通过具体案例,如计算斐波那契数列,详细讲解Java与C++的协作流程,帮助开发者掌握NDK开发精髓,实现高效计算与硬件交互。
98 1
|
4月前
|
Java Android开发 C++
🚀Android NDK开发实战!Java与C++混合编程,打造极致性能体验!📊
【7月更文挑战第28天】在 Android 开发中, NDK 让 Java 与 C++ 混合编程成为可能, 从而提升应用性能。**为何选 NDK?** C++ 在执行效率与内存管理上优于 Java, 特别适合高性能需求场景。**环境搭建** 需 Android Studio 和 NDK, 工具如 CMake。**JNI** 构建 Java-C++ 交互, 通过声明 `native` 方法并在 C++ 中实现。**实战** 示例: 使用 C++ 计算斐波那契数列以提高效率。**总结** 混合编程增强性能, 但增加复杂性, 使用前需谨慎评估。
136 4
|
5月前
|
Java Go C#
编程语言C#、C++、Java、Python、go 选择哪个好?
我想说的是,不论选择哪种编程语言,决定选择的都是你最终的目的,做选择之前,先充分调研每一个选择项,再做选择思路就会非常清晰了。
108 3
|
5月前
|
程序员 C# C++
lpszBlogName C#开发多年中途被迫改行C++但工作中又经常偷偷使用C#的C++程序员
通过AUMID解析出packageFamily,再根据PackageManager解析出安装目录 PackageManager是WinRT的类型,如何在c++中使用WinRT,请参考C++/WinRT 以下代码需要管理员权限才能运行。
|
5月前
|
编译器 C语言 C++