从 C (Visual Studio) 调用 C++ 类成员函数

2023-12-19

我需要从 C 程序调用 C++ 成员函数。
我在 C 代码中创建了 .cpp/.h 包装器文件,包装了 C++ 成员函数。

即-wrapper.cpp

#include "wrapper.h"

extern "C" {

  void wrap_member1()
  {
    Class::member1();
  }

  void wrap_member2()
  {
    Class::member2();
  }
} 

和包装器.h:

#include <windows.h>
#include <stdio.h>
#include "../C++ class with members I need to call.h" 


extern "C" void wrap_member1();
extern "C" void wrap_member2();

我的问题是当我编译时:
错误 C2061:语法错误:标识符“Class”

它指向 C++ 类的 .h 声明作为错误。结果与我没有包装文件一样......?

附:我还从原型中删除了“extern“C””,并在包装​​函数上收到了错误:

error C2732: linkage specification contradicts earlier specification for 'wrap_member1'

有什么建议吗?


有两个问题:

第一,您在 C 头文件中包含 C++ 头文件。这意味着 C 编译器获得 C++ 代码。这就是导致您遇到错误的原因。作为里德·科普西 https://stackoverflow.com/questions/1479888/call-c-class-member-function-from-c-visual-studio/1479897#1479897建议,把#include在 C++ 源文件中而不是 C 头文件中。

二、你正在使用extern "C"在C头文件中。将您的陈述包含在#ifdef像这样:

#ifdef __cplusplus
extern "C" {
#endif

/* Functions to export to C namespace */

#ifdef __cplusplus
}
#endif

这将使该文件可用于 C 和 C++。

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

从 C (Visual Studio) 调用 C++ 类成员函数 的相关文章

  • 结构化绑定中缺少类型信息

    我刚刚了解了 C 中的结构化绑定 但有一件事我不喜欢 auto x y some func is that auto正在隐藏类型x and y 我得抬头看看some func的声明来了解类型x and y 或者 我可以写 T1 x T2 y
  • 调用 McAfee 病毒扫描引擎

    我收到客户的请求 要求使用他们服务器上的 McAfee 病毒扫描将病毒扫描集成到应用程序中 我做了一些调查 发现 McScan32 dll 是主要的扫描引擎 它导出各种看起来有用的函数 我还发现提到了 McAfee Scan Engine
  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • 机器Epsilon精度差异

    我正在尝试计算 C 中双精度数和浮点数的机器 epsilon 值 作为学校作业的一部分 我在 Windows 7 64 位中使用 Cygwin 代码如下 include
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 如何从 Visual Studio 将视图导航到其控制器?

    问题是解决方案资源管理器上有 29 个项目 而且项目同时具有 ASP NET MVC 和 ASP NET Web 表单结构 在MVC部分中 Controller文件夹中有大约100个子文件夹 每个文件夹至少有3 4个控制器 视图完全位于不同
  • 如何在 C# 中打开 Internet Explorer 属性窗口

    我正在开发一个 Windows 应用程序 我必须向用户提供一种通过打开 IE 设置窗口来更改代理设置的方法 Google Chrome 使用相同的方法 当您尝试更改 Chrome 中的代理设置时 它将打开 Internet Explorer
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 重载 (c)begin/(c)end

    我试图超载 c begin c end类的函数 以便能够调用 C 11 基于范围的 for 循环 它在大多数情况下都有效 但我无法理解和解决其中一个问题 for auto const point fProjectData gt getPoi
  • C# 列表通用扩展方法与非通用扩展方法

    这是一个简单的问题 我希望 集合类中有通用和非通用方法 例如List
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • 实例化类时重写虚拟方法

    我有一个带有一些虚函数的类 让我们假设这是其中之一 public class AClassWhatever protected virtual string DoAThingToAString string inputString retu
  • 空指针与 int 等价

    Bjarne 在 C 编程语言 中写道 空指针与整数零不同 但 0 可以用作空指针的指针初始值设定项 这是否意味着 void voidPointer 0 int zero 0 int castPointer reinterpret cast
  • 如何在当前 Visual Studio 主机内的 Visual Studio 扩展中调试使用 Roslyn 编译的代码?

    我有一个 Visual Studio 扩展 它使用 Roslyn 获取当前打开的解决方案中的项目 编译它并从中运行方法 程序员可以修改该项目 我已从当前 VisualStudioWorkspace 成功编译了 Visual Studio 扩
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • C# 使用“?” if else 语句设置值这叫什么

    嘿 我刚刚看到以下声明 return name null name NA 我只是想知道这在 NET 中叫什么 是吗 代表即然后执行此操作 这是一个俗称的 条件运算符 三元运算符 http en wikipedia org wiki Tern
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri

随机推荐

  • 将文本添加到 .txt 文件中每个新行的开头

    我想将预定义文本添加到文本文件上的每个新行 并使用添加的文本创建一个新的文本文件 请帮忙 在 Windows 中 可以这样做 for f delims L in oldfile txt do echo predefined text L g
  • 覆盖 Salesforce Apex 中抽象类的属性

    我在 apex 中有一个抽象类 其中有几个我想在子类中重写的属性 根据文档 属性支持覆盖和虚拟访问修饰符 但是 当我尝试在父类或子类中使用它们中的任何一个时 我收到一条错误消息 指出变量不能标记为虚拟 覆盖 以下是导致此错误的代码的传真 p
  • Struts2 jQuery标签选择不加载数据

    我正在尝试使用
  • 将整个文件传递给 JVM 参数

    我有几个系统都需要将相同的属性加载到 JVM 我可以使用 D 标志一次加载一个属性 但我正在寻找一种可以一次性加载整个文件中所有属性的东西 例如 我可以将 options file blah properties 添加到网络上的所有 jvm
  • 群发电子邮件跟踪

    如今 大多数在线提供的服务都声称可以 跟踪 电子邮件 但都是通过在电子邮件中嵌入图像来实现这一目的 我的问题是 这是唯一的方法吗 如果不是 还有其他方法吗 这些方法真的万无一失吗 有人对特定软件甚至在线小组有过任何运气吗 是的 这几乎是唯一
  • 数据库中已有一个名为“tbltable1”的对象

    我正在尝试将数据从一个表插入到具有相同结构的另一个表中 select into tbltable1 from tbltable1 Link 我收到以下错误消息 There is already an object named tbltabl
  • 在 TextBlob 中使用翻译功能时出现“HTTPError: HTTP Error 404: Not Found”

    当我尝试在 jupyter 笔记本的 TextBlob 库中使用翻译函数时 我得到 HTTPError HTTP Error 404 Not Found 我在这里发布了我的代码和错误消息的屏幕截图以供参考 5 6 天前 当我第一次运行完全相
  • 改变statusStrip的高度

    我在VS2010中有一个带有statusStrip的简单Windows窗体 无论我尝试什么 statusStrip的高度都没有改变 改变高度的正确方法是什么 thanks 我刚刚更改了 StatusStrip 大小 没有出现问题 创建一个新
  • 无法推断通用参数“T”

    我正在重构我的代码并添加对 Swift 的支持generics 我遇到了编译器错误 我的代码是 func dequeueReusableViewController
  • Passport 和 connect-flash:req.flash 不是函数

    我在学flash消息输入passport并在运行我的脚本时遇到此错误 req flash is not a function 这是我的配置 var flash require connect flash app use flash pass
  • 替换 Query 对象的 my 字段时,缓存数据可能会丢失

    这是我的代码 const NewVerificationCode gt const loading error data refetch useQuery CONFIRMATION CODE skip true onError err gt
  • ASP.NET 客户端到服务器的通信

    您能帮助我了解 ASP NET 中从浏览器到客户端进行通信的所有不同方式吗 我已将其设为社区 wiki 因此请随意编辑我的帖子以改进它 具体来说 我试图通过列出每种方法的工作原理来了解在哪种情况下使用每种方法 我对 UpdatePanel
  • 如何在java中正确格式化JSON字符串?

    我有一个球衣客户端 它从源获取 JSON 我需要将其转换为格式正确的 JSON 通过 http 请求抓取时 我的 JSON 字符串如下所示 properties someproperty aproperty set of data keyA
  • SignInManager.ExternalSignInAsync 与 Facebook 始终返回失败

    Google 可以工作 但 Facebook 总是返回失败 当我检查 loginInfo 时 它显示已验证 true 这是 Startup Auth cs 中的代码 我包含了有效的 Google 代码 public void Configu
  • 如何对岩石等复杂图像进行分割(C++)

    我正在尝试对岩石图片进行分割 我已附上示例 最终目标是找到近似的岩石区域 不确定所需的方法是否是图像分割 我尝试过几种算法 纹理分割没有帮助 因为所有的岩石都是相似的 我可以得到有很多错误的边缘 由于阴影 虽然可以使用 Here is an
  • Visual Studio UML 类图生成器

    我想知道是否有一个软件可以从 Visual Studio 2008 Professional 中的项目文件 C 生成 UML 类图 就像某种插件 我查了以前的帖子 乍一看没有看到任何有用的东西 编辑 我找到了类图项目 但愿意接受更多提示 编
  • 表的每一行的字符串偏移“Data_length”/“Index_length”非法

    学习 PHP mySQL 等 当我使用 xampp 使用 phpmyadmin 创建表时 每一行都会出现此错误 libraries classes Controllers Table TableStructureController php
  • 使用 Powershell 删除重复文件

    我有几千个重复文件 例如 jar 文件 我想使用 powershell 来 递归搜索文件系统 查找重复项 仅通过名称或校验和方法或两者兼而有之 删除除一个之外的所有重复项 我是 powershell 的新手 我将其扔给可能能够提供帮助的 P
  • JQuery 添加点击事件到单选输入文本

    我想要与单选按钮 热门 相关的标签 我开始使用 siblings 方法来实现这一点 我想一定有更好的方法 单选按钮上的单击事件如下所示 RadioButton click function event var questionId this
  • 从 C (Visual Studio) 调用 C++ 类成员函数

    我需要从 C 程序调用 C 成员函数 我在 C 代码中创建了 cpp h 包装器文件 包装了 C 成员函数 即 wrapper cpp include wrapper h extern C void wrap member1 Class m