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来查看函数的入口:
这里写图片描述

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

C#中调用C++的dll的参数为指针类型的导出函数(包括二级指针的情况)

一:首先什么是IntPtr 先来看看MSDN上说的:用于表示指针或句柄的平台特定类型。这个其实说出了这样两个事实,IntPtr 可以用来表示指针或句柄、它是一个平台特定类型。对于它的解释,这个哥...

C#中调用C++的dll的参数为指针类型的导出函数

C#中调用C++的dll的参数为指针类型的导出函数(包括二级指针的情况)          严格来说这篇文章算不上C++范围的,不过还是挂了点边,还是在自己的blog中记录一下吧。      ...
  • jjjfox
  • jjjfox
  • 2011年08月12日 14:07
  • 614

C#调用C++类的导出函数

C# 需要调用C++东西,但是有不想做成COM,就只好先导出类中的函数处理。 抛砖了! 测试IDE版本为 visual studio 2008 C++部分: 1. 首先建一个C++WI...

C++导出函数,C++Invoke再次封装,C#调用

一.C++函数 1.使用VC6新建DLL工程。 2.在头文件中声明函数如: extern "C" bool ResrveUniStringEX(const wchar_t* soucrStr, wc...
  • mdcire
  • mdcire
  • 2015年07月31日 14:02
  • 361

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

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

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

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

VC++编写DLL导出函数及其调用方法

  • 2015年01月07日 14:29
  • 256KB
  • 下载

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

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

c++导出函数接口与实现分离

在用C++写要导出类的库时,我们经常只想暴露接口,而隐藏类的实现细节。也就是说我们提供的头文件里只提供要暴露的公共成员函数的声明,类的其他所有信息都不会在这个头文件里面显示出来。这个时候就要用到接口与...

【图文】[新手]C++ 动态库导出函数名“乱码”及解决

刚接触C++,在尝试从 dll 中导出函数时,发现导出的函数名都“乱码”了。 导出过程如下: 新建一个Win32项目: 新建的解决方案里有几个导出的示例: // 下列 if...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#调用C++导出函数
举报原因:
原因补充:

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