出于不同的目的,我需要提供一个在C#
中实现以下功能的接口但我宁愿不自己编码(为什么重新发明轮子)。 一个更好的解决方案是当我的alloc-functions被调用时,我会简单地调用stdlib.h中的alloc-functions,接口是这样的,所以我“只需要”调用那些函数。
问题是,如何从C#访问stdlib.h中的函数? 我知道平台调用,我越来越好了。但是为了平台调用工作,我需要一个.dll 我不知道哪个.dll实现了stdlib.h
答案 0 :(得分:3)
我认为这听起来不是解决问题的最佳方案。但要回答这个问题,首先需要决定使用哪个C运行时。一种可能性是msvcrt.dll
中的系统组件。访问这样的功能:
[DllImport("msvcrt.dll", CallingConvention=CallingConvention.Cdecl)]
static extern IntPtr malloc(IntPtr size);
[DllImport("msvcrt.dll", CallingConvention=CallingConvention.Cdecl)]
static extern void free(IntPtr ptr);
[DllImport("msvcrt.dll", CallingConvention=CallingConvention.Cdecl)]
static extern IntPtr calloc(IntPtr num, IntPtr size);
[DllImport("msvcrt.dll", CallingConvention=CallingConvention.Cdecl)]
static extern IntPtr realloc(IntPtr ptr, IntPtr size);
然而,MS的官方立场是msvcrt.dll
是私有的,不适用于第三方应用程序。因此,您可能更愿意链接到与特定版本的MSVC关联的C ++运行时。例如,要链接到VS2013运行时,请指定msvcr120.dll
。这当然需要您分发该运行时。