我正試圖將一些託管的C++代碼遷移到64位。 我有一個函數,獲取可變參數,當我傳遞一個System :: String變量給它時,它似乎不能正確傳遞。 這裏是示出該問題的代碼的簡化:可變參數無法在64位與託管對象?
#include <stdio.h>
#include <stdarg.h>
void test(char* formatPtr, ...)
{
va_list args;
int bufSize;
char buffer[2600];
/////////////////////////////////////
//parse arguments from function stack
/////////////////////////////////////
va_start(args, formatPtr);
bufSize = vsprintf(buffer, (const char*) formatPtr, args);
printf(buffer);
va_end(args);
}
void main() {
System::String^ s;
s = "Shahar";
test("Hello %s", s);
getchar();
}
當該代碼在32位運行時,它顯示你好沙哈爾。
當它以64位運行時,它顯示HelloÇz∟⌠■。
假設我想對代碼進行最少量的更改,應如何解決此問題?
%s說明符接受System :: String ^就好了。如果我沒有通過可變參數,這完美地工作。 這只是代碼的簡化,以顯示問題。我不想讓這段代碼更好。我希望它能夠工作,所以我可以將解決方案用於「真實」代碼。 – 2010-12-14 14:12:11