在VS2008中编译纯c/c++程序并由c#调用过程

 引用:http://www.cnblogs.com/moonz-wu/archive/2008/02/29/1086759.html
这篇文章没有什么新意,在2004年的时候就有人写过那时候VS还只是2003版,而且网络上也有很多转来转去的文章,其实一共那么两三篇。其实我也是从那里学来的,只不过中间经历的一些郁闷,因为那些文章没有提到一些注意的事项确是很烦人。
1. 建立一个C#控制台工程,主要用于调试。
2. 在解决方案中添加一个新的空工程(VC++的)。
3. 添加一个源文件到Source Files文件夹(xxx.c or xxx.cpp)。
4. 加入这行代码

#include <string.h>

extern "C" __declspec(dllexport) int mySum(int a,int b,int *c)
{
    *c=a+b;
    return *c;
} 由于原来的文章没有提,导致我缺了#include <string.h>而编译出错,花了点时间修正这问题。
5. 右键点击C++工程,在属性中的General->Configuration Type 选择 Dynamic Library (.dll)。这里还要注意的是为了编译生成的dll文件能被c# 工程导入你需要Common Language Runtime support 选择Common Language Runtime Support (/clr)这项,否则编译的dll不能用到c#工程当中。
6. build C++工程(你也可以用命令行CL.exe来编译文件)。之后,有很多人就直接向当然的跑到c++工程下面的Debug文件夹里去找xxx.dll文件,结果只看到xxx.dll.intermediate.manifest这样的文件失望而归。其实编译后真正的dll文件是在解决方案的Debug文件夹下面。
7. 在c#工程的引用中导入xxx.dll。在c#主文件中键入如下代码:我这里的xxx = CCodeDll
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;

namespace TestEmbedCCalling
{
    class Program
    {
        [DllImport("CCodeDll.dll", EntryPoint = "mySum", CharSet = CharSet.Ansi,
            CallingConvention = CallingConvention.StdCall)]
        public static extern int mySum(int a, int b, ref int c);

        static void Main(string[] args)
        {
            int c = 0;
            Console.WriteLine(mySum(2, 3, ref c));
            Console.Read();
        }
    }
}最后你会看到运行结果:5。
请注意绿色字体内容,祝你好运。


 C++引用c#dll 模拟登陆实现   
用C++写Dll需要很多规范,而在.Net平台下通过c#实现的Dll则要方便许多。但在c++中调用c#写的Dll就得注意一下。不能像引用C++本身的DLL一样。这里讲一下应该注意的细节:(以VS2005为例,VS2008类似)

1.因为用c++本身 的默认配置是没有公共语言运行库支持的,所以首先的修改配置,点击项目->属性->配置属性->常规.在公共语言运行库支持中选择"公共语言运行库支持(/clr)".

2.引用Dll文件和命名空间.
如果我们要引用一个命名空间为UranusNet,文件名为UranusNet.dll的文件.则引用方法为:
#using "../debug/UranusNet.dll"  (这里用using而非include)
using namespace UranusNet;
记得要将dll文件拷贝到对应的目录下

3.调用方法
加入要调用UranusNet命名空间下的UGSInfo类.则代码如下所示:(假设该类有logIn和writeBlog两个方法)
UGSInfo ^ugs = gcnew UGSInfo();(这里要用^而不是*,gcnew而非new)
 if(ugs->logIn("abc","123"))
      ugs->writeBlog("很好", "很强大");

以上就是在c++调用C#的Dll的要点。由于c#的简洁方便的特点,所以我们可以用C#快速的实现DLL文件。
当然一些更底层的功能还得用c++实现。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值