char** C+ 在C#中怎么调用

char** C+ 在C#中怎么调用,第1张

用Intptr吧。

昨天试了一下,char**你可以定义成IntPtr数组,如果只是输入不是输出还可以定义成string数组。

这是我的测试:

#include "dll.h"

#include <windows.h>

#include <stdio.h>

#include <stdlib.h>

DLLIMPORT void HelloWorld (char** str)

{

MessageBox (0, *str, "Hi", MB_ICONINFORMATION)

MessageBox (0, *(str+1), "Hi", MB_ICONINFORMATION)

}

BOOL APIENTRY DllMain (HINSTANCE hInst     /* Library instance handle. */ ,

DWORD reason        /* Reason this function is being called. */ ,

LPVOID reserved     /* Not used. */ )

{

switch (reason)

{

case DLL_PROCESS_ATTACH:

break

case DLL_PROCESS_DETACH:

break

case DLL_THREAD_ATTACH:

break

case DLL_THREAD_DETACH:

break

}

/* Returns TRUE on success, FALSE on failure */

return TRUE

}

-----------------------------------------------------------------

using System

using System.Collections.Generic

using System.Linq

using System.Text

using System.Runtime.InteropServices

namespace char星星

{

class Program

{

[DllImport("charintptr.dll", CallingConvention = CallingConvention.Cdecl)]

public static extern void HelloWorld(IntPtr[] str)

static void Main(string[] args)

{

IntPtr[] sbs = new IntPtr[2]

sbs[0] = Marshal.StringToHGlobalAnsi("test1")

sbs[1] = Marshal.StringToHGlobalAnsi("test2")

HelloWorld(sbs)

Console.ReadKey()

}

}

}

---------------------------------------------------

首先C语言的外部库要按照接口标准,将接口留出来,参考网址如下:

VS2010创建并使用动态链接网页链接

C语言dll文件的说明以及生成、使用方法网页链接

制作C/C++动态链接库(dll)若干注意事项网页链接

如果只有DLL而没有源代码,不能自己编译的话,需要查询DLL的接口是什么样子的,可以使用下面的工具去查询:

DLL分析的非常好用的工具(Dependency Walker 2.2)网页链接

Dependency Walker使用说明网页链接

接下来,就可以在C#中进行C语言DLL的调用了,主要使用System.Runtime.InteropServices下的DllImport,参考网址如下:

C#直接使用DllImport外部Dll的方法网页链接

从托管应用程序调用非托管代码网页链接

另外特别要说明的是,如果你的C语言的DLL里面使用了指针 *** 作,虽然可以使用ref的方式接收传入的数据(参考网址网页链接),但是我非常非常非常推荐你使用unsafe的方式去处理指针 *** 作(参考网址网页链接),因为1、如果你的C语言DLL里面有内存 *** 作错误,C#也没法去修复,2、使用unsafe的指针 *** 作会比使用托管的ref *** 作效率高很多(当对效率要求非常高的时候)。

PS:网上资料很多,我列出来的资料也是现查的,你可以根据我写的内容,在网上自行搜索,寻找适合自己的资料。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11629731.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存