当前位置: 首页 > news >正文

电商网站建设方向百度一下电脑版首页网址

电商网站建设方向,百度一下电脑版首页网址,东莞智通人才网官网首页,沈阳建设工程信息网官网首页现在非常的流行使用C来完成底层的算法或是需要高运行速度的程序快。然后使用 C# 来调用。用C#来写界面和逻辑层。 这样即用到了 C 的运行速度又用到了C# 快速的开发优势。 下面讲一下如何在C#中调用 C生成的dll : // cppdll.cpp 因为这个DLL的目的就是为了让 C#去调用。所以这…

  现在非常的流行使用C++来完成底层的算法或是需要高运行速度的程序快。然后使用 C# 来调用。用C#来写界面和逻辑层。 这样即用到了 C++ 的运行速度又用到了C# 快速的开发优势。

 

下面讲一下如何在C#中调用 C++生成的dll :

// cppdll.cpp  因为这个DLL的目的就是为了让 C#去调用。所以这里不用
// 再去写个头文件了,写头文件主要是为了让 C++的程序去调。我们这里
// 是把函数的声明与定义都写在一起。

#include <iostream>
using namespace std;// 把固定要使用的 “extern "C" __declspec(dllexport)”,放在函数、// 头,这是生成DLL函数所必须的,所以给他起个别名,简洁一些。
#define DLLEXPORT extern "C" __declspec(dllexport)// 写一个简单的 加法函数 add ,增加两个整数值,反加一个整数
DLLEXPORT int add(int i,int j){return i + j;
}
// 再写一个无返回值的Print方法,他传入的是一个字符串
// 注意 这时字符串最好使用 char* 而不是 string. 不然可能会
// 报 “尝试访问受保护内存” 的错误。
DLLEXPORT void Print(char* str,int i) {cout << "Input the " << str << " and " << i << endl;
}

上面的C++程序使用的是 全局的静态方法,这样比较方法调用。当然你也可以写一个类,让C#去调用的。

这是如何在C# 中,调用 上面写的那两个 C++ 函数 :

using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Runtime.InteropServices;namespace Test
{class Program{// CalingConvention 意思是“调用协定",主要是规定一下参数如// 何进去栈,及是由调用方还是被调用方来释放资源。[DllImport("cppdll.dll", CallingConvention = CallingConvention.Cdecl)]public static extern int add(int i, int j);// 如果参数中有 字符串的情况下,还需要设置一下这个函数所使// 用的字符集 CharSet = CharSet.Ansi[DllImport("cppdll.dll", CallingConvention = CallingConvention.Cdecl,CharSet = CharSet.Ansi)]public static extern void Print(string s,int i);static void Main(string[] args) {// C++ add MethodConsole.WriteLine(add(45, 567));// C++ Print MethodPrint("May_H",757);Console.ReadKey();}}
}

参考 : http://www.soaspx.com/dotnet/csharp/csharp_20110406_7469.html

 

------------------------------------------ 2013/10/26 一些补充------------------------------------------

    之前研究的是使用 C# 去调用 C++ 的函数,那么如何来调用C++的类呢. 如果按一般的解决方法,将类在C#中重声明一下,如果其中再有结构体,枚举等会是一个相当麻烦的过程,所以,我们还是使用 调用函数的方法.写一个接口方法,在接口方法中去创建类的指针, 将调用 C++类的操作写在这个接口函数中. 再用C#去调用. 就方便很多. 避开了很多的麻烦.

例如: 在 C++ 中写一个简单的 Person类,只有name ,age.

class Person {
public:
 char* name;
 int age;
 // 构造函数
 Person(char* name,int age);
 ~Person();
 // 方法
 void SayHi();
};

  1. 创建一个 DLLInterface.cpp 文件,写一个 生成 Person 指针的方法:

#define EXPORTDLL extern "C" _declspec(dllexport)

EXPORTDLL void* PersonInit(char* name,int age) {
       Person* per = new Person(name,age);
       return per;
}

这样在 C# 中调用这个文件 ,就可以得到这个类的指针(int).

  2. 根据我们的需要, 可以再写一些接口方法,比如调用它的SayHi 方法

  EXPORTDLL void InvokeSayHi(Person* p) {
     p->SayHi();
  }

再与一个清理 这个生Person指针的方法.

  EXPORTDLL void FreePerson(Person* p) {
     delete p;
     cout << "Free Over" << endl;
  }

这些方法.都接收一个 Person 指针.

3.在C#中.. 引入这个 DLL 及声明接口方法:

  // 这里使用 [MarshalAs(UnmanagedType.LPArray)]byte[] name,来传递字符串,(中文还不行.. 还得研究)

  // 经过看网上的资料, 发现所有的指针都可以使用 IntPtr 在C# 中使用,包括Char*. 在C#向C++传字符串的时候使用 Marshal.StringToHGlobalAnsi("字符串"). 的方法传

  // 递, 方便好用 所以指针都用 IntPtr就行了. Marshel 就是用到托管与非托管之间进行参数传递或转换的一个方法类.

  [DllImport("cpp01.dll", EntryPoint = "PersonInit", CallingConvention = CallingConvention.Cdecl)]
      extern static IntPtr PersonInit([MarshalAs(UnmanagedType.LPArray)]byte[] name, int age);

  // 写成 IntPtr的形式: extern static IntPtr PersonInit(IntPtr name, int age);

  
      [DllImport("cpp01.dll", EntryPoint = "InvokeSayHi", CallingConvention = CallingConvention.Cdecl)]
      extern static void InvokeSayHi(IntPtr personPoint);

4.OK.. 现在我们就可以在C#中调用这个C++类了!

  static void Main(string[] args) {
            // 得到Person 的指针,由Int存储
            int pp = PersonInit(System.Text.Encoding.ASCII.GetBytes("Mick"), 3456); 
            // 使用这个地址调用Person->SayHi 方法
            InvokeSayHi(pp);
            // 清理Person用到的内存
            FreePerson(pp);
        }

 

 

  

转载于:https://www.cnblogs.com/easyfrog/archive/2012/11/13/2767517.html

http://www.lbrq.cn/news/2782621.html

相关文章:

  • 找个人做网站上海网站seo
  • 网站建设运营的灵魂是什么意思有效的网站推广方式
  • 想建设一个网站自己接一些小活软文
  • 做韩国护的网站seo课程培训要多少钱
  • 专业做网站哪里有外贸软件排行榜
  • 如何与网站管理员联系肇庆网站快速排名优化
  • 怎么做电影网站不违法活动推广方式
  • wordpress添加工具兰州网络推广优化怎样
  • 可以做动漫网站的源码源码淘宝产品关键词排名查询
  • 想网上卖家具怎么做网站线上卖护肤品营销方法
  • 淘宝导购网站怎么做东莞网站建设制作
  • 免费crm客户管理系统破解版大地seo
  • 个人网站首页布局图域名注册需要多久
  • 淳安县住房和城乡建设局网站首页合肥百度seo代理
  • 有没有返利网站做京东的简单网页制作成品和代码
  • 怎么做网站导航地图企业网站排名优化公司
  • 做网站推广链接该怎么做6个好用的bt种子搜索引擎
  • 公司网站建设的相关建议网络上如何推广网站
  • 做ktv的网站网络营销的方式有几种
  • 响应式网站模版活动推广
  • 网站绑定微信账号江阴企业网站制作
  • 企业网站的建设毕业论文百度关键词排名批量查询工具
  • 做精神科网站价格seo建站教学
  • 给公司做网站数据分析百度云搜索引擎入口盘多多
  • 杭州做网站公司排名外贸推广如何做
  • 网站新闻图片尺寸市场营销
  • 如何上传织梦做的网站网站系统开发
  • 厦门 外贸商城网站建设网站多久被百度收录
  • 网站提交订单付款才跳转怎么做企业网站搭建
  • 服饰网站建设技术方案如何做好网络销售技巧
  • 迁移学习(Transfer Learning)
  • 力扣hot100:盛最多水的容器:双指针法高效求解最大容量问题(11)
  • 大数据计算引擎(四)—— Impala
  • 咨询进阶——解读咨询顾问技能模型
  • Linux内存管理系统性总结
  • SysTick寄存器(嘀嗒定时器实现延时)