使用托管组件链接到静态库

2023-12-10

在为我的个人小应用程序创建 GUI 后,我尝试将其编译为静态库以在另一个项目中使用。 GUI 已创建,并通过托管公共引用类执行其他任务,该类当前只有 5 个函数,但将添加到其中。

这是我在静态库中的头文件,它将包含在另一个项目中(好吧,至少是一个只有公共函数的新头文件,所有额外的东西都将被删除);



#ifndef GUIInterface_H
#define GUIInterface_H
#include 
#include "MainForm.h"

using namespace System;
using namespace System::Threading;

 public ref class GUIInterface
{
private:
    ThreadStart^ GUIThreadDelegate;
    Thread^ GUIThread;
    void GUIThreadFunction()
    {
        ANNGUI::Application::EnableVisualStyles();
        ANNGUI::Application::Run(gcnew ANNGUI::MainForm());
        return;
    }

public:
    int CreateGUI();

    int DestroyGUI();

    int GetInputData();

    bool CheckNewInput();

    int NetworkState();
};
#endif
  

这是从其他项目(.exe)访问它的方式



#include "main.h"

int main()
{
    GUIInterface ^GUI = gcnew(GUIInterface);
    GUI->CreateGUI();
    return 0;
}
  

main.h 仅包含类定义(如上面所示的头文件),减去私有内容。

我正在使用 Visual Studio 2010 Express C++。这两个项目都是使用 /clr 开关编译的。静态库被设置为 .exe 项目中的引用。当我将静态库编译为 DLL 时,程序运行完美(在我删除应用程序中的 main.h 之后)。当它被编译为静态库时,用于与 GUI 通信的每个函数都会出现 LNK2020 错误。

我将 .exe 与 /VERBOSE 选项链接起来以查看输出。链接器多次精确地查找 .lib 所在的位置,但从未说过它找到了它,即使它正在精确地查找正确的路径和正确的文件。另外,如果这意味着什么,我的 .lib 构建得很好,但将此作为警告。


.NETFramework,Version=v4.0.AssemblyAttributes.obj : warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
  

我的问题是,为什么链接器在正确的位置寻找 .lib,却没有在它的面前看到它?我该如何解决这个问题以便我可以使用我的静态.lib?


静态 .lib 不是托管代码的有效目标选项。没有实现的机制可以使与托管类型关联的最重要的元数据得到与代码相同的处理。它不能被分割成碎片并再次粘合在一起。 MSFT 团队可能考虑过这一点,但被 .obj 文件格式所需的巨大更改吓跑了。这是一个猜测。如果有一个好的错误消息就好了。这是事实。

您必须选择一个 DLL 作为目标。在运行时,JIT编译器执行与链接器相同的功能,它只从客户端实际使用的DLL程序集中提取代码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用托管组件链接到静态库 的相关文章

  • Func 方法参数的首选命名约定是什么?

    我承认这个问题是主观的 但我对社区的观点感兴趣 我有一个缓存类 它采用类型的缓存加载器函数Func
  • 嵌入式系统中的malloc [重复]

    这个问题在这里已经有答案了 我正在使用嵌入式系统 该应用程序在 AT91SAMxxxx 和 cortex m3 lpc17xxx 上运行 我正在研究动态内存分配 因为它会极大地改变应用程序的外观 并给我更多的力量 我认为我唯一真正的路线是为
  • 为什么 POSIX 允许在只读模式下超出现有文件结尾 (fseek) 进行搜索

    为什么寻找文件结尾很有用 为什么 POSIX 让我们像示例中那样在以只读方式打开的文件中进行查找 c http en cppreference com w c io fseek http en cppreference com w c io
  • C# 中可空类型是什么?

    当我们必须使用nullable输入 C net 任何人都可以举例说明 可空类型 何时使用可空类型 https web archive org web http broadcast oreilly com 2010 11 understand
  • 使用 C# 在 WinRT 中获取可用磁盘空间

    DllImport kernel32 dll SetLastError true static extern bool GetDiskFreeSpaceEx string lpDirectoryName out ulong lpFreeBy
  • 在 ASP.Net Core 2.0 中导出到 Excel

    我曾经使用下面的代码在 ASP NET MVC 中将数据导出到 Excel Response AppendHeader content disposition attachment filename ExportedHtml xls Res
  • 使用安全函数在 C 中将字符串添加到字符串

    我想将文件名复制到字符串并附加 cpt 但我无法使用安全函数 strcat s 来做到这一点 错误 字符串不是空终止的 我确实设置了 0 如何使用安全函数修复此问题 size strlen locatie size nieuw char m
  • 使用 LINQ 查找列表中特定类型的第一个元素

    使用 LINQ 和 C 在元素列表中查找特定类型的第一个项目的最短表示法是什么 var first yourCollection OfType
  • 线程、进程和 Application.Exit()

    我的应用程序由主消息循环 GUI 和线程 Task Factory 组成 在线程中我调用一些第三方应用程序var p new Process 但是当我调用Application Exit 在消息循环中 我可以看到在线程中启动的进程仍在内存中
  • 是否有比 lex/flex 更好(更现代)的工具来生成 C++ 分词器?

    我最近将源文件解析添加到现有工具中 该工具从复杂的命令行参数生成输出文件 命令行参数变得如此复杂 以至于我们开始允许它们作为一个文件提供 该文件被解析为一个非常大的命令行 但语法仍然很尴尬 因此我添加了使用更合理的语法解析源文件的功能 我使
  • 像“1$”这样的位置参数如何与 printf() 一起使用?

    By man I find printf d width num and printf 2 1 d width num 是等价的 但在我看来 第二种风格应该与以下相同 printf d num width 然而通过测试似乎man是对的 为什
  • .NET 选项将视频文件流式传输为网络摄像头图像

    我有兴趣开发一个应用程序 它允许我从 xml 构建视频列表 包含视频标题 持续时间等 并将该列表作为我的网络摄像头流播放 这意味着 如果我要访问 ustream tv 或在实时通讯软件上激活我的网络摄像头 我的视频播放列表将注册为我的活动网
  • 可空属性与可空局部变量

    我对以下行为感到困惑Nullable types class TestClass public int value 0 TestClass test new TestClass Now Nullable GetUnderlyingType
  • EPPlus Excel 更改单元格颜色

    我正在尝试将给定单元格的颜色设置为另一个单元格的颜色 该单元格已在模板中着色 但worksheet Cells row col Style Fill BackgroundColor似乎没有get财产 是否可以做到这一点 或者我是否必须在互联
  • 如何在内存中存储分子?

    我想将分子存储在内存中 这些可以是简单的分子 Methane CH4 C H bond length 108 7 pm H H angle 109 degrees But also more complex molecules like p
  • 在Linux中使用C/C++获取机器序列号和CPU ID

    在Linux系统中如何获取机器序列号和CPU ID 示例代码受到高度赞赏 Here http lxr linux no linux v2 6 39 arch x86 include asm processor h L173Linux 内核似
  • 在 ASP.NET 中将事件冒泡为父级

    我已经说过 ASP NET 中的层次结构 page user control 1 user control 2 control 3 我想要做的是 当控件 3 它可以是任何类型的控件 我一般都想这样做 让用户用它做一些触发回发的事情时 它会向
  • 窗体最大化时自动缩放子控件

    有没有办法在最大化屏幕或更改分辨率时使 Windows 窗体上的所有内容自动缩放 我发现手动缩放它是正确的 但是当切换分辨率时我每次都必须更改它 this AutoScaleDimensions new System Drawing Siz
  • 如何使用 ReactiveList 以便在添加新项目时更新 UI

    我正在创建一个带有列表的 Xamarin Forms 应用程序 itemSource 是一个reactiveList 但是 向列表添加新项目不会更新 UI 这样做的正确方法是什么 列表定义 listView new ListView var
  • 将 viewbag 从操作控制器传递到部分视图

    我有一个带有部分视图的 mvc 视图 控制器中有一个 ActionResult 方法 它将返回 PartialView 因此 我需要将 ViewBag 数据从 ActionResult 方法传递到 Partial View 这是我的控制器

随机推荐

  • 设置 SCORM 课程进度

    我只是想知道 是否可以在运行时在 SCORM 文件中设置课程进度 我应该检查哪种方法 进度将根据 SCO 开发人员的学习要求来定义 一般来说 达到的目标 cmi objectives 数量或学习者访问的页面数量 要存储进度 如果 SCORM
  • Shiny 中 fillPage 的基本示例 - 它是如何工作的?

    我不明白如何获得一个图来完全填充我的仪表板 除了标题之外 我想我必须使用 fillPage 但我无法让它工作 这是我的例子 我很感谢任何提示 ipak lt function pkg new pkg lt pkg pkg in instal
  • 为什么这个并行代码比类似的非并行版本慢?

    我有以下代码 从 LINQPad 复制到此处 显然 我似乎不明白 TPL 是如何工作的 或者代码是垃圾 为什么并行版本比非并行版本运行得慢 for int i 0 i lt 100 i ParallelOptions ops new Par
  • Firebase 未将 CORS 标头添加到 REST 请求

    有没有办法为 REST 端点启用 CORS 如上所述here and here Firebase 似乎不再默认添加它们 对于不需要实时连接或无法使用 Websocket 的应用程序来说 这将很有帮助 这是对 Firebase 的 REST
  • R:尽可能均匀地分配数量 II

    我们有一定的数量 例如300 单位 该数量应尽可能均匀地分布在 40 个 槽 或 箱 中 如果每个槽都相同 那就很容易了 所以每个槽都是 7 5 然而 插槽的大小各不相同 我们不能 填充 超过其 大小 允许的范围 例如如果只有 4 个 我们
  • 仅将 HTML、CSS 网页部署到 Tomcat

    我刚刚开始开发website 我现在所拥有的就是HTML 页面由几个人支持CSS 样式表 我可以创建吗来自 HTML 和 CSS 页面的 WAR 文件 我如何将它们部署到 Tomcat 服务器上 Thanks 没有真正需要创建一场战争来从
  • 如何在同一页面上的 Angular 应用程序和非 Angular 应用程序之间进行通信?

    我正在通过 Angular bootstrapping 使用 Angular 模块将一段非 Angular 网页转换为 Angular 版本 它工作得很好 除了它需要与页面的其他部分进行通信这一事实之外 不幸的是 我目前无法将页面的其余部分
  • 简单的计算由于某种原因不起作用

    好吧 我正在尝试计算两个值的百分比 这应该非常简单 但由于某些奇怪的原因它不起作用 我太累了 太笨了 无法弄清楚 这是我的代码 它一直返回 0 我在调试时检查了这些值 FilesCompleted 为 295 TotalFilesCount
  • 如何将小数四舍五入到小数点后 2 位 (Java)

    我对java相当陌生 我必须创建这个程序 但我不知道从哪里开始 有人可以帮助我做什么以及如何编写代码来开始吗 编写一个模拟收银机的程序 提示用户输入三件商品的价格 将它们加在一起即可得到小计 确定小计的税费 6 求销售小计加税的总金额 显示
  • 如何从 C# 或 VB.Net 使用 Win32 'DwmSetIconicThumbnail'?

    我想使用DwmSetIconicThumbnail函数为我的应用程序的缩略图预览设置静态图像 正如上面的参考链接中指出的 首先需要调用Dwm设置窗口属性启用DWMWA FORCE ICONIC REPRESENTATION and DWMW
  • Xamarin 项目在 Visual Studio 2015 中不可用

    我有一个 Xamarin 解决方案 我已经在 Mac 上工作了一段时间 但现在通过 Visual Studio 中的 Xamarin 集成 我想在 Windows 计算机上工作 我在 Visual Studio 2015 Enterpris
  • DropDownList 的编辑器模板

    我为字符串字段创建了一个 EditorTemplate 它实现了引导程序 如下所示 using MyProject model object div class form group Html LabelFor m gt m new cla
  • 无法将数据表绑定到图表控件

    我想在我的测试应用程序中使用极坐标图 我有一个包含几列的数据表 其中名称为 X 的列应提供 x 值成员 其他列应提供 y 值成员 我在 MSDN 上找到了一个教程 但它并没有真正起作用 因为该行 chart1 DataBindTable d
  • 使用 Highcharts 通过 JSON 重新加载图表数据

    我正在尝试根据页面中其他位置的按钮单击 通过 JSON 重新加载 Highcharts 图表的数据 最初 我想显示一组默认数据 按类别支出 然后根据用户输入加载新数据 例如 按月支出 我能想到的从服务器输出 JSON 的最简单方法是将 GE
  • 如何在“打开方式”对话框中设置程序名称?

    我想要程序读取VLC Move on end 我已将程序集信息修改为以下内容 但无济于事 如何更改 打开方式 对话框中显示的名称 它作为FriendlyAppName 值存储在注册表中的HKCR Applications YourExeNa
  • ASP.NET 中 Session 对象的使用

    我刚刚接到一项新任务来引导其他人创建的网站 但我对网络绝对是新手 该网站采用 ASP NET C 语言 除了Session对象之外 代码本身并不难理解 我不明白它在哪里 如何以及为什么使用 请问有人可以用一个可能的例子解释 Session
  • 如何在 Project Reactor 中实现轮询逻辑?

    我有一个方法发送请求以获取作业状态并返回状态 如下所示 Mono
  • JavaScript 中命名函数优于匿名函数吗? [复制]

    这个问题在这里已经有答案了 可能的重复 JavaScript var functionName function 与 function functionName 在 Javascript 中提取函数有两种可能的方法 var foo func
  • 自由飞行相机 - 绕 X 轴奇怪的旋转

    所以我几乎使用矢量和 gluLookAt 之类的东西实现了一个自由飞行相机 所有 4 个方向的移动和绕 Y 轴的旋转都可以正常工作 For the 绕Y轴旋转我计算眼睛和中心向量之间的向量 然后用旋转矩阵旋转它 如下所示 Vector te
  • 使用托管组件链接到静态库

    在为我的个人小应用程序创建 GUI 后 我尝试将其编译为静态库以在另一个项目中使用 GUI 已创建 并通过托管公共引用类执行其他任务 该类当前只有 5 个函数 但将添加到其中 这是我在静态库中的头文件 它将包含在另一个项目中 好吧 至少是一