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();
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值