我知道我不能在Silverlight应用程序中添加对c#dll库的引用,如果它不是Silverlight库的话。 但我有一个问题 - 我可以把这个DLL像非托管代码,并使用像C/C + +库一样的PInvoke? 我曾与示例项目dll库尝试:通过PInvoke从Silverlight 5调用C#dll库方法
namespace TestLib
{
public class TestClass
{
public static int Add(int x, int y)
{
return x + y;
}
}
}
在我的Silverlight应用程序:
[System.Runtime.InteropServices.DllImport("TestLib.dll", EntryPoint = "TestLib.Add", CallingConvention = System.Runtime.InteropServices.CallingConvention.StdCall)]
public static extern int Add(int x, int y);
但试图调用方法,我得到一个错误:
无法在DLL中找到名为'TestLib.Add'的入口点
如果我尝试没有命名空间:
无法找到名为“添加”的DLL
你能给我一些命中的切入点?请注意,我也尝试将此dll编译为Silverlight应用程序,但有一些方法不受Silverlight支持。
好吧,这是一些东西,谢谢你。尽管对我来说最好的解决方案不是修改这个c#dll。但它似乎我要求很多;) –
如果修改原始的dll不是一个选项,你可以让你自己的包装DLL来暴露TestLib.dll中的项目。包装将会暴露给com,并且会调用你的dll。你也可以使用C++/CLI来创建一个包含原生代码和托管代码的包装器DLL。您可以将函数公开到本地代码(对于Pinvoke),然后调用您的托管代码。 链接(http://www.codeproject.com/Articles/9903/Calling-Managed-Code-from-Unmanaged-Code-and-vice,http://www.codeproject.com/Articles/35041/Mixing-NET -and-本机代码) – mcdon