最近想用window form替之前的寫好的一些library寫個漂亮的工具介面,沒想到專案剛建起來一compile就出現了大問題:_CrtIsValidHeapPointer assert fail,
原以為是之前的lib沒考慮周全,所以花了一些時間從頭到尾檢查一遍,並嘗試其他方式實作,結果還是出現這個assert!!
最後求助G大神之後才知道這又是M$在背後胡搞之後,卻沒有盡到告知大眾的義務,使得程式大眾白白浪費許多的時間在解決這些鳥問題!Damn it!
Form Application內定的程式進入點(Entry Point)並沒有包含CRT(C Run Time)Startup Routine
所以global objects(variables), static objects(variables), class static objects(variables)的初始化都沒有被正確執行
也就是說只要library中有宣告並定義以上變數就有可能出現_CrtIsValidHeapPointer這個assert!
經過三天的研究之後,我的解決的方法如下:
1. 將project的entry point設為空白
Project->Properties->Linker->Advanced->Entry Point
請將初始值(main) 改成空白
2.新增Entry Point
請在含有int main(array<System::String ^> ^args)此函示的cpp中加入
(1) #include<Windows.h>
(2)INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
return main(nullptr);
}
其中nullptr應該是一個包含Command line內容的String^ array,不過..... 我懶得寫了!
程式這樣改之後CRT的startup routine就會被呼叫到,native global object就可以被正確初始化
就這樣 我浪費了三天!三天,應該夠我把工具的基礎功能都寫好了!X的M$
參考網頁:
(1)http://forums.msdn.microsoft.com/zh-TW/vcgeneral/thread/fa0e9340-619a-4b07-a86b-894358d415f6/
(2)http://www.jb101.co.uk/ Apr. 20 Trouble ‘atexit’ using a native library with managed app
原以為是之前的lib沒考慮周全,所以花了一些時間從頭到尾檢查一遍,並嘗試其他方式實作,結果還是出現這個assert!!
最後求助G大神之後才知道這又是M$在背後胡搞之後,卻沒有盡到告知大眾的義務,使得程式大眾白白浪費許多的時間在解決這些鳥問題!Damn it!
Form Application內定的程式進入點(Entry Point)並沒有包含CRT(C Run Time)Startup Routine
所以global objects(variables), static objects(variables), class static objects(variables)的初始化都沒有被正確執行
也就是說只要library中有宣告並定義以上變數就有可能出現_CrtIsValidHeapPointer這個assert!
經過三天的研究之後,我的解決的方法如下:
1. 將project的entry point設為空白
Project->Properties->Linker->Advanced->Entry Point
請將初始值(main) 改成空白
2.新增Entry Point
請在含有int main(array<System::String ^> ^args)此函示的cpp中加入
(1) #include<Windows.h>
(2)INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
return main(nullptr);
}
其中nullptr應該是一個包含Command line內容的String^ array,不過..... 我懶得寫了!
程式這樣改之後CRT的startup routine就會被呼叫到,native global object就可以被正確初始化
就這樣 我浪費了三天!三天,應該夠我把工具的基礎功能都寫好了!X的M$
參考網頁:
(1)http://forums.msdn.microsoft.com/zh-TW/vcgeneral/thread/fa0e9340-619a-4b07-a86b-894358d415f6/
(2)http://www.jb101.co.uk/ Apr. 20 Trouble ‘atexit’ using a native library with managed app
請先 登入 以發表留言。