利用.net技术解决C++导出函数char*转C#string

news/2024/7/7 9:45:49

C++导出函数定义:

 LONG  Test::Test(String  ^c1,String  ^c2,String  ^c3)
  {
   using namespace Runtime::InteropServices;
   char* chars = (char*)(Marshal::StringToHGlobalAnsi(c1)).ToPointer();
   char* chars1 = (char*)(Marshal::StringToHGlobalAnsi(c2)).ToPointer();
   char* chars2 = (char*)(Marshal::StringToHGlobalAnsi(c3)).ToPointer();
   return ::Init(chars, wDVRPort,chars1, chars2);
   //Marshal::FreeHGlobal(IntPtr((void*)chars));
   //Marshal::FreeHGlobal(IntPtr((void*)chars1));
   //Marshal::FreeHGlobal(IntPtr((void*)chars2));
  }


C#使用

  Test   tc=new Test();

   tc.Test("aaa","bbbbbb","ccccccc");


 

  这里有个问题,就是关于释放,就是注释掉的部分。


http://www.niftyadmin.cn/n/3094154.html

相关文章

关于 JVM 命令行标志您不知道的 5 件事

2019独角兽企业重金招聘Python工程师标准>>> 1. 引言 JVM 是多数开发人员视为理所当然的 Java 功能和性能背后的重负荷机器。然而,我们很少有人能理解 JVM 是如何进行工作的 — 像任务分配和垃圾收集、转动线程、打开和关闭文件、中断和/或 JIT 编译 Jav…

virtualbox命令行共享CentOS目录

virtualbox命令行共享CentOS目录 1. 安装virtualbox增强工具"右ctrlc" 显示和隐藏virtualbox虚拟机的菜单栏。在VirtualBox的菜单里选择"设备(Devices)" -> "安装增强功能包(Install Guest Additions)"创建挂载目录: mkdir /mnt/z…

VC 动态导入DLL

动态导入DLL 一般的DLL都会有对应的导入库,方便程序静态载入动态链接库,否则的话,你可能就需要自己动态导入了。 导入过程: 1.LoadLibrary 调入DLL文件,然后在手工GetProcAddress获得对应的函数了。 2.有了导入库&…

佳能打印机 打不出黑色怎么办

打印黑白表格的时候,只有一点黑色的痕迹 测试打印的时候,顶部黑色一个无法显示 深度清洗一次之后 深度清洗两次之后

Java Lambda入门学习

2019独角兽企业重金招聘Python工程师标准>>> 感觉Lambda表达式写起来确实很简洁,今天就简单看了一下Lambda表达式。在Java 8,一个重要的变更是引入Lambda表达式(lambda expression),这听起来似乎很牛,有种我虽然不知道…

Solr查询参数

引自:http://www.cnblogs.com/zhangweizhong/p/5056884.html 一.基本查询 q 查询的关键字,此参数最为重要,例如,qid:1,默认为q*:*, fl 指定返回哪些字段,用逗号或空格分隔,注意&am…

VC--检测应用程序进程

有时候我们需要检测某个进程是否存在,我们可以使用下面的函数。经过测试可用。 //查找XXXX.exe进程 //返回进程PID号 DWORD GetProcessidFromName(TCHAR *strProcessName) {PROCESSENTRY32 pe; DWORD id0; HANDLE hSnapshotCreateToolhelp32Snapshot(TH32CS_S…

Mac OS使用

2019独角兽企业重金招聘Python工程师标准>>> 1. 开机启动文件目录 /Library/LaunchDaemons 2. 转载于:https://my.oschina.net/yunjie/blog/775414