#define DebugPrint(x, y) \
{ \
char *MACROmsg; \
char *MACROprint; \
MACROmsg = (char *) malloc (1056); \
MACROprint = (char *) malloc (1056); \
sprintf_s(MACROmsg, 1056, "%ws", x); \
sprintf_s(MACROprint, 1056, MACROmsg, y); \
MessageBox(NULL, MACROprint, NULL, NULL); \
if(MACROprint) free(MACROprint); \
if(MACROmsg) free(MACROmsg); \
}
BOOL APIENTRY DllMain(HINSTANCE hInstance, DWORD dwReason, LPVOID lpReserved)
{
BOOL bRtn;
DebugPrint(L"%d\t%ws(0x%08X, 0x%08X, %i, \"%ws\")\0", (2, L"a", 4, 4, 4, L"a"));
DebugPrint(L"%d\t%s(0x%08X, 0x%08X, %i, \"%s\")\0", (2, "a", 4, 4, 4, "a"));
...
你好。由於沮喪,我很抱歉提出一個問題,但我查看了我的代碼並將其更改爲以此開始。第一行執行正常,第二行不行。它顯示爲第二個%s在output.c中有問題(微軟的sprintf代碼)。指針變爲null。我會認爲他們的代碼是完美的,錯誤在於我,但我看不到它。未知(損壞的內存)錯誤。 sprintf_s output.c
我非常懷疑我已經設法更改該文件的代碼,並意外地重新編譯它,因爲它被鎖定,我會有一條消息警告我。
從C++ .net應用程序調用該DLL。我無法想象這裏也有錯。
我有幾個全局變量,如果initalized他們只initalized爲NULL。他們沒有被引用。我很沮喪地說,至少我不知道還有什麼可以看的。也許有人遇到類似的事情,或者有什麼問題可以或可能會有什麼想法。
非常感謝Thankyou。
我使用Visual C++ 2008
附:代碼是不同的(我通常不會考慮使用sprint_s(...,「%ws」,x),但那也是導致錯誤。我期待這個代碼是好的,我不能。算起來非常感謝
我建議發生這種情況,因爲括號內和宏中的參數只會推送最後一個參數(請參閱逗號運算符)。嘗試使用可變宏(http://msdn.microsoft.com/zh-cn/library/ms177415.aspx)或內聯函數。 – user1837009
我認爲'PrintData'可能是'DebugPrint',但是SO的代碼重構有一個錯字? 在宏'DebugPrint'你應該檢查'malloc()'是否*不*返回NULL' – Jimbo
這就是答案謝謝。 :) malloc()正在通過調試器進行檢查。一個函數正在取代sprintf,但感謝。 :) – user2600628