您的位置:首页 > 编程语言 > C语言/C++

vs2010 .net 调用c++的简单例子

2012-10-17 10:50 435 查看
一 、先介绍两个重要的关键词组

1.extern "C" __declspec(dllexport) 放在C++的方法前是作用是向外提供接口

2.static extern 放在C#的代码前作用是寻找外部对应的方法

二、现在开是进行项目的编写

1.打开vs2010 新建C++类库取名为MyTest

2.在源文件文件夹下有一个MyTest.cpp打开MyTest.cpp

添加代码

extern "C" __declspec(dllexport) char* GetString(){

return "holle world";

}

然后编译生成

3.新建C#控制台项目在控制台项目中引用c++项目生成的.dll文件

4.写C#代码

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Runtime.InteropServices;

namespace ConsoleApplication1

{

class Program

{

//"MyTest.dll" 是对应的dll的名称

// EntryPoint = "GetString" dll 对应的方法名

// CharSet = CharSet.Ansi 数据传递的类型

// CallingConvention 约定

[DllImport("MyTest.dll", EntryPoint = "GetString", CharSet = CharSet.Ansi, CallingConvention = CallingConvention.StdCall)]

extern static string GetString();

static void Main(string[] args)

{

Console.WriteLine(GetString());

Console.Read();

}

}

}

然后运行C#项目就可以了

-----------------------------------------------------------------------------------------------

在运行时如果出现

对 PInvoke 函数“ConsoleApplication1!ConsoleApplication1.Program::mySum”的调用导致堆栈不对称。原因可能是托管的 PInvoke 签名与非托管的目标签名不匹配。请检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配。等问题的话就看C# 和c++的数据类型是否对应, CharSet 和CallingConvention 修改一下对应的值一般就能解决问题
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: