Linux上的VC ++ Runtime

时间:2015-03-23 08:35:33

标签: c# linux mono pinvoke

我有一个.NET应用程序通过P / Invoke调用W32的API(msvcrt40.dll)。在Linux Mono下,应用程序在msvcrt40.dll加载时因DllNotFoundException而崩溃。我查看了Wine来搜索msvcrt40共享库,但只找到了无用的假dll。我的问题是:

  • Linux下是否有任何msvcrt40等效的lib工作?

更新--------------

使用的API是:

_mbcjistojms
_mbcjmstojis
_ismbblead

使用dumpbin查看msvcrt40.dll。我发现它将我的调用转发给msvcrt.dll,后者被libc.so.6取代。再次,使用objdump查看libc-2-12.so以查找上述API。不幸的是,这些API没有出口。

感谢。

2 个答案:

答案 0 :(得分:0)

  

Linux下是否有任何msvcrt40等效的lib工作?

非常不可能完全直接替换那个非常旧的MSVC运行时。

前进的方向是找出正在调用的函数,并找到在目标平台上以自然方式实现相同功能的方法。也许使用Mono框架可以很容易地实现该功能。或许您可以使用平台的C运行时。

<强>更新

根据您的评论,您只需要在不同的代码页之间执行一些转换。使用Encoding类。

答案 1 :(得分:0)

Linux上不存在这些API。但幸运的是我找到了这些函数的源代码,因此用C#方式重写它们。这解决了这个问题。