C#调用C++导出函数

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

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

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭