标签: managed

HOWTO:在WindowsCE Compact Framework上从非托管C++调用托管C#接口

我有丰富的非托管的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是否以这种方式工作,但我认为它确实如此.

  1. 我吠叫错了树吗?是否可以通过相应的COM接口在非托管C++中使用托管C#接口?

  2. 是否设置[组件:标记有ComVisible特性(真)在其AssemblyInfo.cs文件属性使托管程序集的所有接口可以通过COM在不可控制的世界通过GUID的AssemblyInfo.cs中定义,或做我必须做更多的东西?

  3. 如何从托管的.dll中获取typelib,以便我的非托管C++库可以#import它?

  4. 我尝试将我的托管C#库项目添加为非托管C++库项目中的参考,但这似乎没有帮助.在这种情况下,这样的参考是否相关?

  5. 有没有更好的方法来解决从非托管C++世界调用托管C#代码的基本问题?我刚刚在这里阅读的是一个混合模式库,带有托管翻译层来桥接非托管/托管差距.我不知道这是一个很好的策略,呼叫响应速度的一个重要因素,但可能它是从长远来看更好,因为我打算在某个时候重写UI来管理C#,从而把所有的精力的扔掉用户界面而不是用更永久的商业/通信逻辑来捣乱?无论这个问题的答案如何,我仍然想解决使用COM的问题,如果没有其他原因而不是好奇心.

com compact-framework unmanaged managed windows-ce

6
推荐指数
1
解决办法
2157
查看次数

使用托管代码中的非托管代码

我的项目是在MFC中开发的,这是一个未经编码的代码.现在我需要通过重用大多数MFC类在C#中创建一个类似的应用程序.

是否可以直接从MFC dll导出class/struct/enum,这样我就可以使用dllimport在我的C#中导入它并使用它.

c# dll mfc unmanaged managed

6
推荐指数
1
解决办法
1636
查看次数

"C#基类虚函数" - "在Managed C++ ref class中重写"

我有一个.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# c++ virtual overriding managed

6
推荐指数
1
解决办法
2734
查看次数

在托管的Win8 metro应用程序中查找内存泄漏?

我目前正在使用C#和SharpDX为Windows 8开发一款地铁游戏.该项目进展顺利,但最近需要开始追踪内存泄漏,我不确定从哪里开始.

Visual Studio 11中的内置内存分析器不适用于Metro应用程序,WinDBG似乎无法连接到metro应用程序(除非我使用不正确),而且我很难找到任何有关查看.NET 4.5 for metro中的托管分配.

有人对这个有经验么?有一个好的地方开始寻找?有没有人成功使用工具来帮助检测Metro应用中的内存泄漏?

c# memory-management managed microsoft-metro windows-8

6
推荐指数
1
解决办法
3652
查看次数

Jetty for .NET world

我正在寻找Net Framework世界托管代码中的Jetty等价物.它存在吗?我想使用F#/ C#/ VB.net应用程序中的库."不要在Jetty中部署应用程序,在应用程序中部署Jetty."

.net c# f# managed

6
推荐指数
1
解决办法
3543
查看次数

有关如何将F#代码与本机C++集成的任何想法?

我想在本机C++中使用一些F#代码.更准确地说,我想在F#中编写一些数据结构,然后在我的C++代码中使用它们.

我不知道如何将托管F#与非托管C++混合使用.如何创建胶水层?

.net c++ f# managed

6
推荐指数
1
解决办法
2089
查看次数

MSBuild托管与非托管属性

有没有办法在MSBuild逻辑中确定我是否正在运行托管代码和非托管代码?不是C++ vs C#,而是管理vs非托管?我想根据代码是托管还是非托管来设置一些属性(通常只是版本信息).

msbuild unmanaged managed

6
推荐指数
1
解决办法
730
查看次数

在托管 C++ 中,在类中定义静态单例实例的正确方法是什么?

从 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(指向静态变量声明)。

接下来是我的问题:

  1. 方法 1 是否应该在托管 C++ 中工作或有效?
  2. 为什么第二种方法在 2015 年有效,而不是第一种(即有什么区别)?
  3. 哪种方法是实现最终目标的正确方法?

managed-c++ c++-cli managed visual-studio-2015

6
推荐指数
1
解决办法
2832
查看次数

托管代码与非托管代码

我试图让我的想法围绕托管与非托管代码的概念.如果我错了,请纠正我,但托管代码是任何被编译为字节码的东西,而非托管代码被编译成机器代码.

它是否正确?

computer-science unmanaged managed

6
推荐指数
1
解决办法
611
查看次数

如何使用 MDM 通过 UserDefaults 配置企业应用程序来读取“com.apple.configuration.management” - Swift 3 或 4

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 上适用于我。

我已经检查了这个参考链接代码,但不知何故它对我来说效果不佳。我不知道我做错了什么。

enterprise managed configure mdm ios

6
推荐指数
0
解决办法
1455
查看次数