登录 用户中心() [退出] 后台管理 注册
   
您的位置: 首页 >> 程序员学前班[不再更新,只读] >> 主题: VS2008导入dll -- vs2008 下的 c++ 程序调用 c# 的dll     [回主站]     [分站链接]
标题
VS2008导入dll -- vs2008 下的 c++ 程序调用 c# 的dll
clq
浏览(0) + 2010-04-30 09:40:49 发表 编辑

关键字:

VS2008导入dll -- vs2008 下的 c++ 程序调用 c# 的dll

中文版本:
右击项目,选择“添加引用”,选择“浏览”,指定 test.dll

英文版本:
"please specify the assembly search path using /AI or by setting the LIBPATH environment variable"
--------------------------------------------------
这个错误提示说的很清楚呀。要么你需要在VS项目属性中指定搜索Assembly的路径,要么在环境变量中设置LIBPATH指定该路径。 Bentley.General.1.0.dll的路径应该是在C:\Program Files\Bentley\MicroStation\assemblies\ECFramework下
--------------------------------------------------
请查看你项目的“Reference(引用)”文件夹下Bentley.General.1.0和ustation两项前是否带有一个黄色的感叹号。如果 有,说明VS没有找到它们。此时可按如下步骤操作:
1、右击它们选择“Remove”将它们先删除掉;
2、右击“Reference”选择Add Reference打开Add Reference对话框;
3、在Add Reference对话框中切换到Browse页面,分别选中这两个DLL文件添加其引用即可。

clq
2010-4-30 9:44:38 发表 编辑

在VS2008中编译纯c/c++程序并由c# 调用过程 及 C++引用c#dll(转)
这篇文章没有什么新意,在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(
23ref c));
            Console.Read();
        }

    }

}
最后你会看到运行结果:5。
请注意绿色字体内容,祝你好运。 




 C++引用c#dll 模拟登陆实现 文章指数:0  CSDN 
Blog推出文章指数概念,文章指数是对Blog文章综合评分后推算出的,综合评分项分别是该文章的点击量,回复次数,被网摘收录数量,文章长度和文章类
型;满分100,每月更新一次。 文章指数:0  CSDN 
Blog推出文章指数概念,文章指数是对Blog文章综合评分后推算出的,综合评分项分别是该文章的点击量,回复次数,被网摘收录数量,文章长度和文章类
型;满分100,每月更新一次。

用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++实现。^_^

 原文地址 http://www.cnblogs.com/moonz-wu/archive/2008/02/29/1086759.html

clq
2010-7-23 16:15:49 发表 编辑

如果这个导出的类你用到了 System.Windows.Forms 的窗体,那么还要在项目的 “引用” 中加入 System.Windows.Forms 的 dll 和 System 的 dll。 其中 System 的 dll 还会自动再引用大量的其他 dll 等的空间,不过这就不需要你手工加入了。

void Cexe_mfcDlg::OnBnClickedButton1()
{
    // TODO: Add your control notification handler code here
    FormEvent ^form1 = gcnew FormEvent();
    form1->Show();
    //form1->ShowWindow();

    //FormEvent form1;
    //form1.Show();

}


总数:2 页次:1/1 首页 尾页  
总数:2 页次:1/1 首页 尾页  


所在合集/目录



发表评论:
文本/html模式切换 插入图片 文本/html模式切换


附件:



NEWBT官方QQ群1: 276678893
可求档连环画,漫画;询问文本处理大师等软件使用技巧;求档softhub软件下载及使用技巧.
但不可"开车",严禁国家敏感话题,不可求档涉及版权的文档软件.
验证问题说明申请入群原因即可.

Copyright © 2005-2020 clq, All Rights Reserved
版权所有
桂ICP备15002303号-1