使用C /CLI包装器DLL时缺少功能
Missing Function while using C++/CLI wrapper dll
我正在编写一个C /CLI包装器,用于在Visual Basic Project中使用一些UMNMAN的C 代码。这是代码
#pragma once
#include "E:ARDUINO DLLUnManagedSystemProfileUnManagedSystemProfileSystemProfile.h"
#include "E:ARDUINO DLLUnManagedSystemProfileUnManagedSystemProfileSystemProfile.cpp"
using namespace System;
namespace MSystemProfile {
public ref class SystemProfile
{
SysProfileInterface * System;
public:
SystemProfile();
enum class ConversionDirection:int
{
FORWARD,
REVERSE
};
enum class MemoryUnits:int
{
BYTE,KB,MB,GB
};
double getVolume();
void setVolume(float volume);
void setScreenBrightness(int brightnessvalue);
int getCurrentBatteryLife();
bool isLowOnPower();
bool isCharged();
bool isCharging();
bool CheckFreeSpace(LPCTSTR lpDirectoryName);
DWORD64 getFreeSpaceAvailable(LPCTSTR lpDirectoryname);
DWORDLONG totalVirtualMemory();
DWORDLONG usedVirtualMemory();
SIZE_T myVirtualMemoryUse();
DWORDLONG totalRam();
DWORDLONG usedRam();
SIZE_T myRamUse();
float BtoKB(float data, MemoryUnitConverter::ConversionDirection direction);
float BtoMB(float data, MemoryUnitConverter::ConversionDirection direction);
float BtoGB(float data, MemoryUnitConverter::ConversionDirection direction);
float KBtoMB(float data, MemoryUnitConverter::ConversionDirection direction);
float KBtoGB(float data,MemoryUnitConverter::ConversionDirection direction);
float MBtoGB(float data, MemoryUnitConverter::ConversionDirection direction);
float convertTo(MemoryUnitConverter::MemoryUnits sourceunit,MemoryUnitConverter::MemoryUnits destinationunit, float data);
};
}
中有两个函数,即
bool CheckFreeSpace(LPCTSTR lpDirectoryName);
DWORD64 getFreeSpaceAvailable(LPCTSTR lpDirectoryname);
当我构建它们并反对视觉基本项目时,以下错误出现
错误图像
它说错误3'CheckFreespace'具有不支持的返回类型或不支持的参数类型。
我知道也许VB.NET不支持LPCTRSTR类型,但是现在我该如何解决此问题。
另一个问题是,如果C /CLI支持 lpctrstr 那么为什么不vb.net。
预先感谢您。
类型LPCTSTR是Microsoft创建的C/C 类型,用于Windows API。由于C /CLI是C 代码,并具有托管扩展,因此CANS可以解决LPCTSTR类型而无需错误。但是,vb.net是托管代码,罐子"请参阅"仅包括lpctstr。
的托管类型要将参数传递到/到未管理的代码,您可以使用 Marshalas 属性。在vb.net中,函数声明为:
<DllImport("<your's dll>", CharSet := CharSet.Unicode, SetLastError := true)>
Friend Shared Function CheckFreeSpace(<MarshalAs(UnmanagedType.LPCStr)> lpDirectoryName as string) As <MarshalAs(UnmanagedType.U1)> Boolean;
您可以在此处阅读有关编组的更多信息。
i通过将参数作为system :: string和汉斯所说的函数以system ::的函数为单位解决了问题c。str()功能在其中获得一个char*。另外,我将角色集更改为多重材料以解决问题。
相关文章:
- MFC/DLL中缺少ATL :: CSTRINGT功能,该功能与Clang/vs-2019构建
- 加载所有DLL功能
- 在C 功能执行后,使用GCHANDLE CRALSES将大型结构从C#Unity脚本传递到C DLL
- 来自Pascal DLL/SO中的C 加载和调用功能
- 我应该如何分享该过程和多个DLL之间的功能列表
- 通过功能指针通过DLL进行回调功能,运行时检查失败#0错误
- 从DLL到EXE C 的呼叫功能
- 使用C /CLI包装器DLL时缺少功能
- 如何从Java中的C DLL加载和使用结构和功能
- 我可以用具有相同功能名称的多个DLL加载元素吗?
- C 通过引用DLL中的功能传递std ::字符串
- 调用包含C#功能指针的DLL函数
- 在DLL中导出功能.C和C
- 从X86 DLL获取导出功能
- 如何从Delphi编译的DLL中调用C 中的功能
- 功能在DLL中
- 错误:在C#中调用C DLL功能
- 如何将多个静态链接库合并到一个dll中,给定每个静态库定义导出的功能(vc++2008)
- c静态库在cpp dll中的功能
- 是否有用于修改AutoHotkey_L中DLL调用功能的标准协议