如何:为Windows Phone使用c ++项目(C#)

时间:2013-08-08 12:27:15

标签: c# c++ dll windows-phone-8 managed-c++

现在我有几个C ++ DLL及其源代码。 这些是托管DLL,我可以直接将它们添加到c#项目作为参考。问题是现在我想在Windows Phone应用程序(c#)中使用它们。

我不知道如何实现这一点,请帮忙

我对这些C ++项目一无所知,它们包含很多头文件。我是否必须重写这些代码以适应Windows手机?那将是一个悲伤的故事..

或者我只需要将它们重新编译为不同类型的项目?

感谢您的病人

1 个答案:

答案 0 :(得分:1)

不确定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-a-c-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

请注意,初看时语法有些奇怪,而且不能使用eveything。但是,你获得的是使用C ++类的能力 - 导出“C”的东西禁止你这样做。