相关疑难解决方法(0)

如何在C#windows应用程序中使用C++类?

我正在尝试在我的c#windows应用程序中使用c ++类方法

我用这个

[DllImport("ZKNetLib.dll", EntryPoint = "ZK_NET_DEV_SetEventCallBack")]
public static extern int ZK_NET_DEV_SetEventCallBack(int u32Handle, ref OnEventCallBack u32Event, IntPtr pUserData);
Run Code Online (Sandbox Code Playgroud)

导入dll及其方法

但是,在dll方法中还有一些其他方法也被使用,我发现很难找出到底发生了什么.就像在上面导入的那样,dll正在使用"OnEventCallBack"方法.那么,有没有办法在我的Windows应用程序中使用这些c ++类和头文件.

我,通过制作类对象并使用那个命名空间,听说在c ++中使用c#应用程序类.

所以,我想知道应该有任何方法将这些头文件和类用于我的c#应用程序吗?

以下是编辑过的问题

ZK_NET_DEV_SetDataCallBack此函数用于信息数据回调.HI_S32 ZK_NET_DEV_SetDataCallBack(HI_U32 u32Handle HI_ON_DATA_CALLBACK cbDataCallBack,HI_VOID*pUserData);

参数u32Handle [IN]操作句柄cbDataCallBack [IN]信息数据回调函数pUserData [IN]用户数据

回调函数typedef HI_S32(*HI_ON_DATA_CALLBACK)(HI_U32 u32Handle,HI_U32 u32DataType,HI_U8*pu8Buffer,HI_U32 u32Length,HI_VOID*pUserData);

回调函数参数u32Handle操作句柄u32DataType数据类型宏定义值含义ZK_NET_DEV_MOTION_DETECTION 0运动检测报警ZK_NET_DEV_INPUT_ALARM 1输入报警ZK_NET_DEV_KEEP_ALIVE 2心跳包pu8Buffer数据.如果u32DataType的值是ZK_NET_DEV_MOTION_DETECTION,则pu8Buffer存储为HI_S_ALARM_MD.typedef struct {HI_U32 u32Area; //区域HI_U32 u32X; // x坐标HI_U32 u32Y; // y坐标HI_U32 u32Width; //矩形宽度HI_U32 u32Height; //矩形高度} HI_S_ALARM_MD; u32Area的最大值为4.相关数据如下:宏定义值含义ZK_NET_DEV_MOTION_AREA_1 1区域1 ZK_NET_DEV_MOTION_AREA_2 2区域2 ZK_NET_DEV_MOTION_AREA_3 3区域3 ZK_NET_DEV_MOTION_AREA_4 4区域4 u32Length数据长度.如果u32DataType的值为ZK_NET_DEV_MOTION_DETECTION并且在两个区域中生成警报,则u32Length的值为:u32Length = 2*sizeof(HI_S_ALARM_MD)u32DataType用户数据

返回值HI_SUCCESS返回成功操作,HI_ FAILURE返回失败操作.

c#

5
推荐指数
1
解决办法
183
查看次数

在 C++/CLI 代码中包含来自非托管 C++ 代码的标头

我正在为非托管 C++ 库编写 CLR 包装器。

我从非托管库中包含了两个文件:

//MyCLIWrapper.h
#include "C:\PATH\TO\UNMANAGED\Header.h"
#include "C:\PATH\TO\UNMANAGED\Body.cpp"
Run Code Online (Sandbox Code Playgroud)

然后我正在为非托管库函数编写 CLI 实现:

//MyCLIWrapper.h
// includes ...
void MyCLIWrapper::ManagedFunction()
{
  UnmanagedFunction(); // this function is called successfuly
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我的非托管函数包含对其他非托管头文件中定义的其他函数的调用。这会导致编译器链接错误。

如果我将包含添加到定义这些函数的非托管头文件中,我的错误就会得到解决。但是,有很多功能,并且需要很多包含。

有没有不同的方法来解决这个问题?

编辑: PS 我的托管代码位于单独的 Visual Studio 项目(输出 - DLL)中,并且编译设置设置为 /CLR。非托管代码位于单独的 Win32 项目(输出 - DLL)中。

此外,经过更多研究后,我得出的结论是,理论上我可以将我的 Win32 非托管项目设置为 CLR,并在其中添加我的托管类和头文件作为入口点,然后它们将全部编译为单个 DLL 文件。这可能会解决(?)链接错误。但是,我更愿意保留松散耦合以及将我的非托管项目设置为 CLR 可能引发的其他一系列问题。

编辑#2: 我引用的非托管类(body.cpp、header.h)包含所需文件,这些文件定义了导致问题的函数。但是,我的托管代码不接受非托管 body.cpp 和 header.h 中的包含。

unmanaged c++-cli

0
推荐指数
1
解决办法
5899
查看次数

标签 统计

c# ×1

c++-cli ×1

unmanaged ×1