现在我有几个 C++ DLL 和它们的源代码。这些是托管的 DLL,我可以直接将它们添加到 c# 项目中作为参考。问题是现在我想在 Windows Phone 应用程序 (c#) 中使用它们。
我不知道如何实现这一点,请帮助
我对这些 C++ 项目一无所知,它们包含很多头文件。我是否必须重写这些代码以适应 Windows 手机?那将是一个悲伤的故事。。
或者我只需要将它们重新编译为不同类型的项目?
谢谢你的病人
现在我有几个 C++ DLL 和它们的源代码。这些是托管的 DLL,我可以直接将它们添加到 c# 项目中作为参考。问题是现在我想在 Windows Phone 应用程序 (c#) 中使用它们。
我不知道如何实现这一点,请帮助
我对这些 C++ 项目一无所知,它们包含很多头文件。我是否必须重写这些代码以适应 Windows 手机?那将是一个悲伤的故事。。
或者我只需要将它们重新编译为不同类型的项目?
谢谢你的病人
不确定 Windows Phone C# 是如何做到的,但普通的 C# 可以:
a) 直接从 C 库加载符号,例如:
using System;
using System.Runtime.InteropServices;
static class win32
{
[DllImport("kernel32.dll")]
public static extern IntPtr LoadLibrary(string dllToLoad);
[DllImport("kernel32.dll")]
public static extern IntPtr GetProcAddress(IntPtr hModule, string procedureName);
[DllImport("kernel32.dll")]
public static extern bool FreeLibrary(IntPtr hModule);
}
(这取自:http : //www.andyrushton.co.uk/csharp-dynamic-loading-of-ac-dll-at-run-time/ 经过简短的谷歌搜索)
为此,您需要将 C++ 接口方法导出为“C”,例如:
extern "C" __declspec( dllexport ) int MyFunc(long parm1);
(来自 MSDN:http: //msdn.microsoft.com/en-us/library/wf2w9f6x.aspx)
b) 在 C++/CLI 中使用包装器将非托管 C++ 连接到托管 C#:
这是一个很好的例子: http: //www.codeproject.com/Articles/19354/Quick-C-CLI-Learn-C-CLI-in-less-than-10-minutes
请注意,乍一看语法有些奇怪,并且不能使用任何东西。但是,您获得的是使用 C++ 类的能力——导出“C”会禁止您这样做。