c# c++ dll-C#调用C++和opencv生成的dll库文件,其中函数中带有指针

问题描述

C#调用C++和opencv生成的dll库文件,其中函数中带有指针

大家好,我用C#调用C++的dll,其中一个函数中有指针,参数的定义在C++中是一个结构体,但是我现在遇到的问题是无法获取托管类型的地址和大小,或无法声明指向它的指针,下面我把这个函数在C++中的定义和我自己转到C#中的定义给大家贴出来,大家帮帮忙,本人属于C++和C#新手。
C++
1. int THFI_Create (short nChannelNum,THFI_Param* pParam)
功能:初始化THFaceImage SDK,只需在应用程序初始化时调用一次
参数:
nChannelNum,通道数,用于多线程的通道,每个线程对应一个通道. 每个线程使用的通道ID从0到nChannelNum-1,如通道数为4,那么每个线程使用的合法通道ID为0,1,2,3
pParam,算法参数
返回值:
Int整型,返回实际成功初始化的通道数
struct THFI_Param
{
int nMinFaceSize;//min face width size can be detected,default is 50 pixels
int nRollAngle;//max face roll angle,default is 30(degree)
bool bOnlyDetect;//only detect face or not(if it's true,only Detect API is enable,Feature API is disable),defaule is false(Detect API is enable,and Feature API is enable)
DWORD dwReserved;//reserved value,must be NULL
THFI_Param()
{
nMinFaceSize=50;
nRollAngle=30;
bOnlyDetect=false;
dwReserved=NULL;
}
};
C#
[StructLayout(LayoutKind.Sequential)]
public struct THFI_Param
{
[FieldOffset(0)]

public Int16 nMinFaceSize;
[FieldOffset(2)]

public Int16 nRollAngle;
[FieldOffset(4)]

public Boolean bOnlyDetect;
[FieldOffset(6)]

public UInt32? dwReserved;
};

    [DllImport("THFaceImage.dll", EntryPoint = "THFI_Create", CharSet = CharSet.Auto)]
    unsafe static extern int THFI_Create(Int16 nChannelNum, THFI_Param* pParam);

THFI_Create显示错误 CS0208: 无法获取托管类型(“WindowsFormsApplication1.Form1.THFI_Param”)的地址和大小,或无法声明指向它的指针。

解决方案

C#中调用C++的dll的参数为指针类型的导出函数
C#中调用C++的dll的参数为指针类型的导出函数

时间: 2025-01-20 12:29:44

c# c++ dll-C#调用C++和opencv生成的dll库文件,其中函数中带有指针的相关文章

在VS2010上使用C#调用非托管C++生成的DLL文件(图文讲解) 背景

背景       在项目过程中,有时候你需要调用非C#编写的DLL文件,尤其在使用一些第三方通讯组件的时候,通过C#来开发应用软件时,就需要利用DllImport特性进行方法调用.本篇文章将引导你快速理解这个调用的过程.   步骤 1. 创建一个CSharpInvokeCPP的解决方案:   2. 创建一个C++的动态库项目:   3. 在应用程序设置中,选择"DLL",其他按照默认选项: 最后点击完成,得到如图所示项目:       我们可以看到这里有一些文件,其中dllmain.c

有关c# 调用vc++编写的非托管DLL、socket编程等相关知识的讲的比较详细的书籍

问题描述 有关c# 调用vc++编写的非托管DLL.socket编程等相关知识的讲的比较详细的书籍 学习c# 调用vc++编写的非托管DLL.socket编程等相关知识的讲的比较详细的书籍都有哪些?(最好是基于VS2008的) 解决方案 c#调用非托管C++生成的dllc# 调用 C++ 非托管 DllC#调用非托管dll 解决方案二: 这样一个知识点,最好是 Baidu/Google 查找来解决 书上的内容,没有网络上的丰富

我用opencv2.4编写了一个算法并生成了.DLL ,并在我电脑上用C#调用成功, 但在没有安装opencv2.4.9电脑上用C#使用, 请问怎把用到的op

问题描述 我用opencv2.4.9+VS2010平台上用C++编写了一个算法并生成了.DLL,并在我电脑上用C#调用成功,但是在没有安装opencv2.4.9的电脑上用C#使用,请问怎把用到的openCV库里的.DLL也一起封装到我要生成的算法代码的DLL中,让其他没有安装opencv2.4.9的电脑的C#调用?谢谢指教,不胜感激! 解决方案 解决方案二:大家有好的方法,可以发我邮箱3044757309@qq.com,谢谢大家了,不胜感激......解决方案三:1.不要嫌麻烦,把opencv的

SQL Server 调用C#。net写的Dll ,(分享我的HelloWorld测验)

server SQL Server 调用C#.net写的Dll 1.构造DLL:首先我们要在.net里面创建一个类库工程,写个简单的HelloWorldusing System; namespace MyDll{ /// <summary> /// Class1 的摘要说明. /// </summary> public class Class1 { public Class1() { // // TODO: 在此处添加构造函数逻辑 // } public String sayHel

如何在NodeJS中调用SS生成的DLL

要想在NodeJS中调用SS生成的DLL, 需要借助EdgeJS. EdgeJS: http://tjanczuk.github.io/edge/ 如果你还不知道如何在SS 中生成DLL, 请查看: Spider Studio 新版本 (x-mas) - 可以引入第三方程序集, 可以将脚本生成为DLL 下面以曾经写过的XML/JSON互转的脚本为例 (C#中 另辟蹊径解决JSON / XML互转的问题) 说明如何在NodeJS中应用SS DLL: 1. 安装edgejs npm install

VC++调用Fortran生成的DLL实例

VC++++和Fortran混合编程借助于Fortran生成的DLL进行 (采用C默认的传址方式进行函数参数传递) 1.Fortran 生成DLL 新建Fortran DLL程序test1.f 添加如下代码: ! test1.f90 ! ! FUNCTIONS/SUBROUTINES exported from test1.dll: ! test1 - subroutine !示例没有返回值的子例程 subroutine test1(a,b) ! Expose subroutine test1

关于调用matlab生成的dll问题(符号运算)

问题描述 关于调用matlab生成的dll问题(符号运算) __function [res]=Mint(f1)syms x;f2=simplify(int(f1x));res=f2;end__简单的求一个不定积分 问如何在源文件中调用此函数(c/c++)? 解决方案 看我写的博客:http://www.blogjava.net/wxb_nudt/archive/2008/01/28/178246.html当年可是好好研究过的. 解决方案二: http://www.cnblogs.com/lida

vc++-VC++如何调用C#编写的串口驱动 DLL

问题描述 VC++如何调用C#编写的串口驱动 DLL 最近弄一个串口打印的项目,我一直是用VC++进行开发的,c#没用过,但是对方提供的打印机的DEMO却是C#的例程,本来想着DLL是跨语言的,应该没什么问题,但是我用vc++编写了一个测试程序,确没有任何数据输出,很简单的例程,我按流程在上面加了打开串口,设置串口,发送数据,关闭串口.这几步都是用的现成的dll里面的函数,他把串口的数据操作也封装起来了,然后我就想到,在c#中是可以直接用库函数对串口读写,是不是因为这个原因,导致我在vc++中不

c-关于VB.net调用C生成的dll,遇到的比字符集不匹配还纠结的问题

问题描述 关于VB.net调用C生成的dll,遇到的比字符集不匹配还纠结的问题 升级项目.从6.0到2012.升级后出现调用dll中c的方法:DLLEXPORT BOOL WINAPI InsUpdDel( LPSTR lpSqlStr LPRTNINFO RtnInfo )其中 LPSTR lpSqlStr 是_char × 类型,在API _winnt.h中定义:winnt.h // ANSI (Multi-byte Character) types//typedef Null_termin