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++类的导出函数

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

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

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

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

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

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

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

研究了一下关于c/c++编译器关于导出函数的不同处理

刚刚我在用试验ffmpeg解码库解码视频文件的时候,写好了但是提示连接错误,就网上找了一些文章,现在总结一下,如有错误或不严谨的地方请告之,免得我坑害别人,先谢过了! 总所周知,c++是c的增强和扩展...

C++动态链接库导出函数或者类

1、新建一个Win32 Project,然后选择dll程序。 2、添加头文件Student.h#pragma once#ifndef _STUDENT_H_ #define _IMP_EXP_CLA...

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

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

C++编译时函数名修饰约定规则和DLL中导出函数的方法

C++编译时函数名修饰约定规则:      __stdcall调用约定:      1、以"?"标识函数名的开始,后跟函数名;      2、函数名后面以"@@YG"...

DLL 导出函数 _stdcall 和 _cdecl调用约定

—— 关于 DLL 在 VB 中调用的一些细节          (VS 2005 编译器)
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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