2015-12-21 52 views
0
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字節數組來訪問數據,當我調試,我可以看到的數據是在監視窗口中可見(全局變量我爲我的項目使用Visual Studio 2005)如何訪問C++公共類函數在C文件修改

+0

你是指C語言源文件還是C++語言源文件?我不清楚。 –

+0

不完全確定問題是什麼。 – edtheprogrammerguy

回答

1

如果您想從C++代碼中訪問C++代碼,您需要理解編譯和鏈接時語言之間的一點主要區別。每種語言都使用name mangling。這意味着,如果使用C或C++創建它,相同的變量/函數將具有不同的鏈接器名稱。這也是爲什麼你可以在C++中重載函數而不是在C中的原因。

當談到解決你的問題時,普遍接受和最簡單的解決方案就是聲明這些變量,就好像它們使用C風格的變形一樣。要做到這一點,你只需要使用extern "C"這樣的:

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

在這種情況下,你將能夠從C文件訪問這些變量。

這對函數的作用也是一樣的,但是這也意味着你不能像使用這些名稱重載那樣使用C++特性(如果你試圖讓你的連接器會抱怨)。

+0

@感謝menedal的回答 – hariudkmr