Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我是否需要使用非托管C++;C#中的dll?_C#_C++_Dll_Marshalling_Unmanagedresources - Fatal编程技术网

我是否需要使用非托管C++;C#中的dll?

我是否需要使用非托管C++;C#中的dll?,c#,c++,dll,marshalling,unmanagedresources,C#,C++,Dll,Marshalling,Unmanagedresources,我有一个基本问题 < >我有一个C++非托管DLL,它具有一些参数,其中包括一些无符号字符、无符号短、无符号长、符号字符、签名短、签名长数据类型。p> 我需要封送它还是直接映射它? 最佳实践是什么(如果有的话) e、 g 动态链接库 C#(C#中的直接映射) 大多数数据类型在托管内存和非托管内存中都有一个通用表示,不需要互操作封送拆收器进行特殊处理。这些类型称为blittable类型,因为它们在托管代码和非托管代码之间传递时不需要转换 MSDN:要扩展mozfox的响应,列表是:byte,sby

我有一个基本问题

< >我有一个C++非托管DLL,它具有一些参数,其中包括一些无符号字符、无符号短、无符号长、符号字符、签名短、签名长数据类型。p> 我需要封送它还是直接映射它? 最佳实践是什么(如果有的话)

e、 g 动态链接库

C#(C#中的直接映射)


大多数数据类型在托管内存和非托管内存中都有一个通用表示,不需要互操作封送拆收器进行特殊处理。这些类型称为blittable类型,因为它们在托管代码和非托管代码之间传递时不需要转换


MSDN

要扩展mozfox的响应,列表是:
byte
sbyte
short
ushort
int
long
ulong
IntPtr
uintpttr
浮点数
单维数组(
[]
)其中,
struct
。缺少
bool
(可以以各种方式封送),
char
(不要问为什么…我不知道),
string
,如果链接较新版本()…旧版本忘记了
float
double
。那么,这行代码就足够了?
[DllImport(DllName,CallingConvention=CallingConvention.Cdecl)]公共静态外部uint SomeFunc(字节变量A);
@nutchracker如果您在Windows中工作,并且方法是cdecl(它没有标记为stdcall)是的,通常你会选择一个默认的选项,但是你确实选择了一个默认值不总是U4的代码。<代码>长< /C> >在64位模式下是棘手的,它是U4在Windows上,Unix是Unix。如果这个代码必须是可移植的,那么你会喜欢修改C++声明。n、 谢谢你的评论。但我真的不明白你的意思。你能提供更多的链接或解释一下吗?这样我才能更好地理解。我真的想知道这方面的最佳做法是什么。
unsigned long SomeFunc(unsigned char variableA);
[DllImport(DllName, CallingConvention = CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.U4)]
public static extern uint SomeFunc(byte variableA);