vs2010 .net 调用c++的简单例子
来源:互联网 发布:小狐仙软件标准版 编辑:程序博客网 时间:2024/06/05 07:34
一 、先介绍两个重要的关键词组
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 修改一下对应的值一般就能解决问题
- vs2010 .net 调用c++的简单例子
- C语言调用lua的简单例子
- c#.net下简单的Ajax例子
- sql 存储过程 几个 简单例子,及在asp.net(C#)中调用存储过程的代码
- ubuntu下c调用mysql的简单例子
- C语言调用libcurl的一个简单例子
- C#.NET中GridView单行编辑的简单例子
- c的简单例子
- c 调用lua 最简单例子
- c调用lua 配置简单例子
- PHP调用C函数简单例子
- Pro*c的简单例子
- .NET异步方法调用的例子
- 一个.net平台调用的例子
- 一个简单调用webservice的例子
- AJAX 调用Web Services 的简单例子
- ajax 调用webservice的简单例子
- Android调用天气预报的WebService简单例子
- TinyXML的简单应用
- java使用Runtime.exec执行linux命令
- Android的Binder机制浅析
- 单一职责原则
- Linux 调试技术
- vs2010 .net 调用c++的简单例子
- Java设计模式之Iterator
- 通过ANT生成MANIFEST.MF中的Class-Path属性
- JAVA JDBC数据库开发
- 里氏替换原则
- 在windows xp中使用VC6.0编译live555生成库文件
- Extjs 4 自定义panel边框,解决双重边框问题
- RTS即时战略游戏巅峰之作《盛衰记:战火文明》(盛衰记:战火下的文明、兴衰:文明战争、Rise and Fall)绝版下载地址。
- 嵌入式软件开发学习导引