我有丰富的非托管的Windows CE 5的C++代码,提供,我想通过它写在托管C#在Windows CE 6和Compact Framework的大量新业务和通讯逻辑相结合的新产品使用的UI.
UI可能知道业务逻辑,但我希望业务逻辑不知道UI,以便我以后可以用托管版本或我选择作为前端的任何其他UI替换它.
我发现了一篇文章,描述了如何使用COM作为Windows世界中的桥梁,但我在WinCE下的.NET CF中应用它时遇到了困难.在过去,我已经导入了类型库并使用COM调用(CoInitialize(),CoCreateInstance())来获取指向其他Windows平台上的接口的指针,这就是我目前正在追求的策略:直接使用COM假设在WinCE中提供相同的工具,非托管C++库来访问托管库中的C#接口.
这是我的问题:typelib.它在我的托管C#库中不可用,因为我过去通过'#import"SomeCPPLibrary.dll"声明使用它.我相信它隐藏在.dll程序集中,以不同于过去的方式存储,因此,不能通过库本身的#import直接获得.我认为我可以#IMPORT类型库,但我不能找到一种方法,从我的管理.dll文件中提取类型库,而我也许能破解在一起的接口定义文件(的.idl),并使用该平台的MIDL.EXE从它生成一个.tlb,不能保证我的.idl,以及由此产生的.tlb真正匹配我的C#.dll中的内容.我甚至不知道平台midl.exe是否以这种方式工作,但我认为它确实如此.
我吠叫错了树吗?是否可以通过相应的COM接口在非托管C++中使用托管C#接口?
是否设置[组件:标记有ComVisible特性(真)在其AssemblyInfo.cs文件属性使托管程序集的所有接口可以通过COM在不可控制的世界通过GUID的AssemblyInfo.cs中定义,或做我必须做更多的东西?
如何从托管的.dll中获取typelib,以便我的非托管C++库可以#import它?
我尝试将我的托管C#库项目添加为非托管C++库项目中的参考,但这似乎没有帮助.在这种情况下,这样的参考是否相关?
有没有更好的方法来解决从非托管C++世界调用托管C#代码的基本问题?我刚刚在这里阅读的是一个混合模式库,带有托管翻译层来桥接非托管/托管差距.我不知道这是一个很好的策略,呼叫响应速度的一个重要因素,但可能它是从长远来看更好,因为我打算在某个时候重写UI来管理C#,从而把所有的精力的扔掉用户界面而不是用更永久的商业/通信逻辑来捣乱?无论这个问题的答案如何,我仍然想解决使用COM的问题,如果没有其他原因而不是好奇心.
我的项目是在MFC中开发的,这是一个未经编码的代码.现在我需要通过重用大多数MFC类在C#中创建一个类似的应用程序.
是否可以直接从MFC dll导出class/struct/enum,这样我就可以使用dllimport在我的C#中导入它并使用它.
我有一个.NET_4托管C++引用类,它来自用C#编写的.NET_4基类.
C#基类:
namespace Core
{
public class ResourceManager
{
public class _Resource
{
public virtual void Delete() {}
}
}
}
Run Code Online (Sandbox Code Playgroud)
托管C++类:
namespace Input.DI
{
public ref class Mouse : ResourceManager::_Resource
{
public:
virtual void Delete() {}
};
}
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
'Input :: DI :: Mouse :: Delete':匹配base ref class方法'Core :: ResourceManager :: _ Resource :: Delete',但不标记为'new'或'override'; 假设'new'(和'virtual')
virtual从C#类重写函数的正确托管C++语法是什么?
我目前正在使用C#和SharpDX为Windows 8开发一款地铁游戏.该项目进展顺利,但最近需要开始追踪内存泄漏,我不确定从哪里开始.
Visual Studio 11中的内置内存分析器不适用于Metro应用程序,WinDBG似乎无法连接到metro应用程序(除非我使用不正确),而且我很难找到任何有关查看.NET 4.5 for metro中的托管分配.
有人对这个有经验么?有一个好的地方开始寻找?有没有人成功使用工具来帮助检测Metro应用中的内存泄漏?
我正在寻找Net Framework世界托管代码中的Jetty等价物.它存在吗?我想使用F#/ C#/ VB.net应用程序中的库."不要在Jetty中部署应用程序,在应用程序中部署Jetty."
我想在本机C++中使用一些F#代码.更准确地说,我想在F#中编写一些数据结构,然后在我的C++代码中使用它们.
我不知道如何将托管F#与非托管C++混合使用.如何创建胶水层?
有没有办法在MSBuild逻辑中确定我是否正在运行托管代码和非托管代码?不是C++ vs C#,而是管理vs非托管?我想根据代码是托管还是非托管来设置一些属性(通常只是版本信息).
从 Visual Studio 2013 跳转到 Visual Studio 2015,我注意到编译器接受托管 C++ 类中的静态自实例的方式存在一些差异。考虑这两个例子:
方法一:
public ref class CResourceManager
{
public:
static property CResourceManager^ Instance
{
CResourceManager^ get() { return %m_Instance; }
}
private:
static CResourceManager m_Instance;
};
Run Code Online (Sandbox Code Playgroud)
方法二:
public ref class CResourceManager
{
public:
static property CResourceManager^ Instance
{
CResourceManager^ get() { return m_Instance; }
}
private:
static CResourceManager^ m_Instance = gcnew CResourceManager;
};
Run Code Online (Sandbox Code Playgroud)
方法 1 曾经在 2013 年工作,但在 2015 年无法编译。不幸的是,我手头没有确切的编译器错误,但它是“变量名前缺少分号”错误之一,基本上是说它找不到类型CResourceManager(指向静态变量声明)。
接下来是我的问题:
我试图让我的想法围绕托管与非托管代码的概念.如果我错了,请纠正我,但托管代码是任何被编译为字节码的东西,而非托管代码被编译成机器代码.
它是否正确?
let serverConfig = UserDefaults.standard.dictionary(forKey: "com.apple.configuration.managed") print("serverConfig count:
\(String(describing: serverConfig?.count))")
Run Code Online (Sandbox Code Playgroud)
对于 iOS 11 及更高版本,以上代码始终返回nil 。但同样的代码在 iOS 9,10 上适用于我。
我已经检查了这个参考链接代码,但不知何故它对我来说效果不佳。我不知道我做错了什么。
managed ×10
c# ×4
unmanaged ×4
.net ×2
c++ ×2
f# ×2
c++-cli ×1
com ×1
configure ×1
dll ×1
enterprise ×1
ios ×1
managed-c++ ×1
mdm ×1
mfc ×1
msbuild ×1
overriding ×1
virtual ×1
windows-8 ×1
windows-ce ×1