C#调用C++导出函数

原创 2016年05月12日 23:49:08

测试环境:VS2010 win7 64位

C++项目准备:
包含文件C++test.h和C++test.cpp
—其中C++test.h:

#include <iostream>

extern "C" __declspec(dllexport) int  sumTest1(int dataA, int dataB);//方式1
__declspec(dllexport) int  sumTest2(int dataA, int dataB);//方式2

—其中C++test.cpp

#include "C++Test.h"

int sumTest1(int dataA, int dataB)
{
    return (dataA + dataB);
}
int sumTest2(int dataA, int dataB)
{
    return (dataA + dataB);
}

C#项目简单的窗体,其中添加两个textbox,一个按钮,和一个label:

这里写图片描述

主要代码:
在C#中新建一个类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;

namespace UseC__DLL
{
    class Class1
    {
        //方式1
        [DllImport("C++Test.dll", EntryPoint = "sumTest1")]
        public static extern int sumTest1(int dataA, int dataB);
        //方式2
        [DllImport("C++Test.dll", EntryPoint = "?sumTest2@@YAHHH@Z")]
        public static extern int sumTest2(int dataA, int dataB);
    }
}

在按钮的click事件中添加想响应代码:

            text1 = Convert.ToInt32(textBox1.Text);
            text2 = Convert.ToInt32(textBox2.Text);
            int ret = Class1.sumTest2(text1, text2);
            label2.Text = ret.ToString(); //(text1 + text2).ToString(); //ret.ToString();

当然这里text1和text2需要先定义。

主要是可以对比一下区别。
通过方式1,函数在dll的入口为函数名本身,即“sumTest1”
通过方式2,函数在dll的入口为类似“?sumTest2@@YAHHH@Z”的形式。

可以通过dependency来查看函数的入口:
这里写图片描述

这里做一简单记录,后续再详细找资料整理,下篇再尝试调用导出类。

如何生成DLL文件并导出函数及如何在C++或C#中调用DLL中导出的函数

关于DLL的含义和优点,不是本文讨论的重点,这里我们仅讨论如何用C++生成DLL文件,并导出函数。 首先:在VS中创建工程的时候,要选择VC++(我只会用C++来生成DLL文件)语言,然后选择w...
  • adi_1987
  • adi_1987
  • 2016年12月05日 13:34
  • 1166

C# 调用C++的导出函数,含有回掉函数

最近在公司做一个新的项目,由于C#做界面是非常快速的,于是决定用C#重写C++的界面,而原来的C++动态链接库是不需要修改的。只需要调用一下就可以了。 在调用过程中发现C++有回调函数,于是翻开MS...
  • CNHK1225
  • CNHK1225
  • 2016年11月08日 10:17
  • 619

C#静态调用C++Dll导出函数,并在C++Dll中回调C#函数

本文介绍三个主题 如何在C#中调用C++ DLL中的函数 如何在C++ DLL中回调传入的C#中的函数 如何在C#中调用C++ DLL中的函数...
  • A764341349
  • A764341349
  • 2017年09月28日 17:33
  • 213

C#直接调用DLL导出函数

示例 1 本示例显示如何使用 DllImport 属性通过调用 msvcrt.dll 中的 puts 输出消息。 // PInvokeTest.cs using System; using S...
  • shaoxiaoning
  • shaoxiaoning
  • 2014年08月25日 21:28
  • 772

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

C#与C++的混合编程 之二  使用非托管dll 导出标准函数
  • fang1192801693
  • fang1192801693
  • 2015年11月29日 12:40
  • 866

DLL导出类和导出函数

1、动态库DLL中的类或者函数有时候要被其他的库调用,因此需要被其他库调用的类或者函数需要进行导出。 2、首先编写需要导出的DLL,新建一个工程设置应用程序类型为DLL 3、类的代码如下 ...
  • goodluckMT
  • goodluckMT
  • 2016年09月28日 16:05
  • 3443

c#调用c++的导出函数

1.c++的导出函数通过def文件说明bool   CreateFormEditor(HWND hWndParent) //不用头文件说明{    RECT  rcRect = {0, 0, 400,...
  • su317
  • su317
  • 2008年01月15日 10:00
  • 311

c#调用C++写的dll导出类,如何实现

网上看了一些都是调用c++写函数能不能实现c#使用c++写的类各位高手请赐教 解决方案 » 类的有一个成员函数,是返回这个类的指针,那么在C#里面就是一个INTPTR,它是什么你不用管。然后C++...
  • CCCstudyer
  • CCCstudyer
  • 2014年11月21日 14:17
  • 4191

C++ 查看dll导出函数

输入如下命令,查看dll导出函数: dumpbin -exports D:\xxx.dll   回车
  • wushuangge
  • wushuangge
  • 2017年08月18日 15:07
  • 122

C++ 导出函数名的命名规则。

C++ 导出函数名的命名规则。
  • hejinjing_tom_com
  • hejinjing_tom_com
  • 2011年03月30日 15:01
  • 4851
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#调用C++导出函数
举报原因:
原因补充:

(最多只允许输入30个字)