2 lovple lovple 于 2016.01.18 21:49 提问

C#调用C++动态库参数转换

用C#调用C++封装好dll,这个动态库的方法如下:long GetImageData( LPCTSTR i_strImageID, long i_nPhysicalX, float i_fMag,
long *o_nPhysicalWidth, long *o_nPhysicalHeight, void *i_pBuffer, long *io_nBufferSize) ,请问对应的C#方法参数如何写?

3个回答

caozhy
caozhy   Ds   Rxr 2016.01.18 22:00
 int GetImageData( StringBuileder i_strImageID, int i_nPhysicalX, float i_fMag, 
ref int o_nPhysicalWidth, ref int o_nPhysicalHeight, intptr i_pBuffer, ref int io_nBufferSize) 
lovple
lovple   2016.01.18 22:21

非常感谢,但测试了一下,报以下错误:Additional information: 尝试读取或写入受保护的内存。这通常指示其他内存已损坏

fei13148687
fei13148687   2016.01.19 10:01

你可以参考这样写:
C++
extern "C"__declspec(dllexport)
void GetImageData(char*strImageID,int i_nPhysicalX, float i_fMag, int o_nPhysicalWidth,
int o_nPhysicalHeight, ushort* i_pBuffer, int* io_nBufferSize)

c#
[DllImport("xxxxx.dll",EntryPoint="GetImageData")]
public static unsafe extern void GetImageData(char*strImageID,int i_nPhysicalX, float i_fMag, int o_nPhysicalWidth,
int o_nPhysicalHeight, ushort* i_pBuffer, int* io_nBufferSize)

c#中
string strImageID_ptr="A0001"
char*strImageID = (char*)Marshal.StringToCoTaskMemAnsi(strImageID_ptr)
ushort[,] i_pBuffer_t=new double[10,10]
ushort* i_pBuffer =&i_pBuffer_t[0,0]

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
【C# 调用C/C++动态库 需要注意的地方】
1、接口在*.cs文件中声明: A、在函数接口前添加[DllImport("jnvsdk.dll")];         注意点:如果你的C++动态库不是jnvsdk.dll,请替换成对应的XXX.dll库的路径名。 B、将C++头文件中的接口直接赋值到[DllImport("jnvsdk.dll")]下方;         C、在接口前面添加 public static extern 字
C#处理VC++动态库回调函数的字符串指针参数(传递二进制流)
副标题:C#中数据类型转换时用到的SizeParamIndex参数的含义 由于C#在调用VC++的库文件时,其代码为托管代码,所以C#和VC++的库之间数据在流转时就需要进行托管和非托管的转换,再加上C#中没有地址的概念,导致在VC++中的地址管理,在C#中根本用不上。其中的表现之一就是在C#中处理VC++库的内存指针相当麻烦,这不,今天就不得不面临这个问题了 库文件A.dll
Demo: c/c++动态库(DLL)调用,c#等其他语言调用c/c++的DLL
c++动态库调用另一个动态库 c++动态库调用c动态库 c#等其他语言调用c/c++动态库
在C#中调用C语言写的动态链接库 DLL
1.首先将相关的C语言接口的DLL文件复制到bin\Debug                        2.添加 using System.Windows.Shapes;  3. 在类中用一下方式添加接口函数          [DllImport("TFFT.dll", EntryPoint = "TtfTest_InitTestEvn")]         public stat
C#加载C、C++动态库的方法
1、针对托管动态库的调用 本文章中的外部调用函数声明如下: public delegate int PutValue(string name, string value); Assembly ass = Assembly.LoadFile(filePath);//这里是动态库的路径。 Type tWorker = ass.GetType(dllType);//dllType是你所需要
C#调用C/C++动态库,封装各种复杂结构体。
现在公司要做一个使用C
C#调用C/C++动态链接库
C#调用C/C++动态链接库示例
c#调用c动态库
c#调用c动态库,主要是调用读卡器的动态库
C#调C++动态库Dll C++回调C#函数
vs2010 新建项目 / Visual C++ / 类库; 项目名  MyCallbackDll 头文件: 定义类 成员函数 // MyCallbackDll.h #pragma once using namespace System; #ifdef DLL #define DLL_API __declspec(dllexport) #else #define DLL_API #en
C#调用C/C++动态链接库(.dll)详解
第一篇编译C的动态连接库 在实际工作中,我们经常会将C语言中的.lib和.h文件(静态库)编译成动态连接库.dll文件(这里只提供这两种文件,没有完整的工程),以提供给其他语言平台调用。 1,必须有.lib文件,只有.h文件是无法编译动态连接库的。 2,我使用的是VS2008,这里打开VS,新建项目—〉win32控制台应用程序,输入项目名称,点击确定,图示如fig.1所示。