我試圖在SDL和我的C#.NET程序之間編組數據。第幾個電話,我讓到SDL.DLL做工精細,因爲我沒有錯誤,我的Windows控制檯應用程序不會打開一個空的應用程序窗口:使用PInvoke在'SDL.DLL'中找不到SDL_LoadBMP()入口點
My_SDL_Funcs.SDL_Init(0x0000FFFF); // SDL_INIT_EVERYTHING
IntPtr scrn = My_SDL_Funcs.SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, 0x00000000); // SDL_SWSURFACE
screen = (SDL_Surface)Marshal.PtrToStructure(scrn, typeof(SDL_Surface));
My_SDL_Funcs.SDL_WM_SetCaption("Hello World", null);
// ...
當我嘗試但是調用SDL_LoadBMP(),我得到這個運行時錯誤:
Unable to find an entry point named 'SDL_LoadBMP' in DLL 'SDL'.
SDL的醫生說是SDL_LoadBMP需要一個const char *文件名,並返回一個指向SDL_Surface結構。
我第一次嘗試宣告的PInvoke爲:
[DllImport("SDL", CallingConvention = CallingConvention.Cdecl)]
public static extern IntPtr SDL_LoadBMP([MarshalAs(UnmanagedType.LPWStr)] string file);
當這個沒有工作,我想:
public static extern IntPtr SDL_LoadBMP(IntPtr file);
和使用:
IntPtr fn = Marshal.StringToHGlobalAnsi(filename);
IntPtr loadedImage = My_SDL_Funcs.SDL_LoadBMP(fn);
假設是,函數執行確實存在於這個庫(SDL.DLL版本1.2.14)中,我是否使用了const char *的錯誤調用?
你說曾幾次..你可以張貼..除非我沒有看到它的代碼..聽起來像任何一個問題與釋放封送的實例或一些你試圖打電話給我的方法,或者可能不是一個靜態的方法..但我願意猜測你沒有正確地釋放非託管資源.. – MethodMan 2011-12-29 19:12:15
@DJ克拉澤 - 我修改了原來的問題包括工作電話。 – Buggieboy 2011-12-29 19:33:13
很酷我也會和@ GalacticJello的回答我沒有想到嘗試在我自己的本地電話..好趕上它GalacticJello – MethodMan 2011-12-29 19:34:35