c++ - 如何访问c文件中公共(public)类函数修改的c++全局变量

标签 c++ variables global

DialogReprog.cpp

unsigned char PasswordValue[16];
unsigned char SystemKeyValue[16];

void CDialogReprog::OnOK()
{
// TODO: Add your control notification handler code here
char *ptr;
size_t count=0;

UpdateData();
TCHAR buffer[50];
GetDlgItemText(IDC_PASSWORD, buffer, 50);
ptr = (char *)buffer;
for(count = 2; count < 6; count++)
{
    sscanf(ptr, "%2hhx",&PasswordValue[count-2]);
    ptr += 2;
}

GetDlgItemText(IDC_SYSKEY, buffer, 50);
ptr = (char *)buffer;
for(count = 2; count < 18; count++)
{
    sscanf(ptr, "%2hhx",&SystemKeyValue[count-2]);
    ptr += 2;
}

UpdateData(FALSE);
CDialog::OnOK();

}

需要访问 C 文件中的 PasswordValue 字节数组来访问数据,当我调试时我可以看到数据在监 window 口中可见(我正在为我的项目使用 Visual Studio 2005)

最佳答案

如果您想在 C 代码中访问 C++ 代码中的内容,您需要了解两种语言在编译和链接方面的一些主要区别。每种语言都使用 name mangling .这意味着相同的变量/函数对于链接器将具有不同的名称,具体取决于您是使用 C 还是 C++ 创建它。这也是为什么您可以在 C++ 中重载函数但不能在 C 中重载的原因。

在解决您的问题时,普遍接受且最简单的解决方案是声明这些变量,就好像它们使用 C 风格的重整一样。为此,您只需像这样使用 extern "C":

extern "C"{
    unsigned char PasswordValue[16];
    unsigned char SystemKeyValue[16];
}

在这种情况下,您将能够从 C 文件访问这些变量。

这同样适用于函数,但这也意味着您不能使用 C++ 功能,例如使用这些名称进行重载(如果您尝试使用,您的链接器会报错)。

关于c++ - 如何访问c文件中公共(public)类函数修改的c++全局变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34387582/

相关文章:

c# - 在 Visual C# 中创建全局变量

ruby-on-rails - Ruby on Rails : Where to define global constants?

c++ - WinAPI 单击按钮时没有任何反应

C++单例模板类继承

javascript - 如何从 jQuery 获取变量以发挥作用?

java - 将 ArrayList 与 JCF Map 结合使用

java - Action 监听器无法正常工作

ios - 创建一个 objective-c 全局类

python - 如何从 C++ 执行 python

c++ - Visual Studio CPU-采样进入/退出方法