C#与C++的混合编程 之二 使用非托管dll 导出标准函数

本文介绍了如何在C#中调用非托管C++编译的DLL,通过创建C++工程生成DLL,然后在C#工程中使用DllImport调用导出的C接口。关键点包括:结构体对齐、类型转换以及参数传递的注意事项。
摘要由CSDN通过智能技术生成

C#与C++的混合编程 之二  使用非托管dll 导出标准函数




前面我们介绍了C#与C++混合编程的几种方式,并介绍了用CLR封装非托管dll的调用方法,下面我们介绍一下C#调用非托管C++导出标准C接口的方式。


(1)建立生成dll的工程


打开VS,选择"新建项目"-“VC++”-"Win32"-"Win32项目",工程的名字叫"MyNativeDll",配置如下图所示,因为我有可能用到MFC的类,所以我就勾选了“MFC”的选项,在此需要注意的是,如果你新建时没有勾选MFC,但在后面却想动用MFC的内容,就会遇到“MFC apps must not #include <windows.h>”的Error,只是在工程的配置里修改是根本没有用的,必做要重建工程。



(2)实现dll导出的函数


新建好工程后,在VS的“解决方案资源管理器”中可以看到如下图的目录。



在工程里添加几个文件,Define.h,CFunction.h,CFunction.cpp,其内容如下所示:


//Define.h 用于导入dll的宏定义。

1
2
3
4
5
6
7
//Define.h
///
//
#ifndef _DEFINE_H_
#define _DEFINE_H_
#define _EXTERN_C_  extern "C"  _declspec(dllexport)
#endif


//CFunction.h 函数定义,这里我特意定义了一组结构,我的用意稍后再讲。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
//CFunction.h
///
#ifndef _C_FUNCTION_H_
#define _C_FUNCTION_H_
#include "Define.h"
#include <string>
#include <istream>
struct  SystemTime
{
     int  year;
     int  month;
     int  day;
     int  hour;
     int  minute;
     int  second;
     int  millsecond;
     SystemTime & operator= (SystemTime st)
     {
         this ->year = st.year;
         this ->month = st.month;
         this ->day = st.day;
         this ->hour = st.hour;
         this ->minute = st.minute;
         this ->second = st.second;
        
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值