Click here to Skip to main content
15,891,424 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Hi,
I've defined a function for a C++/CLI library:
C++
extern "C"
{
	INT_PTR __cdecl brl_graphics_Graphics(int Width, int Height, int Depth, int Hertz, int Flags);
}

And this is the function that calls it, it's just a wrapper:
C#
IntPtr BlitzMax::BlitzMax::Graphics(int Width, int Height, int Depth, int Hertz, int Flags)
{
	return IntPtr(brl_graphics_Graphics(Width, Height, Depth, Hertz, Flags));
}

When I call it from a C# application I get a AccessViolationException, for some reason in the disassembly it doesn't use cdecl calling convention:
push        dword ptr [ebp+10h] 
push        dword ptr [ebp+0Ch] 
push        dword ptr [ebp+8] 
mov         ecx,dword ptr [ebp-4] 
mov         edx,dword ptr [ebp-8] 
call        FFD595B8 


Thanks for helping in advance.
Posted
Comments
skydger 18-Oct-12 3:35am    
Is it possible, that target systems for your projects differs?
Dávid Kocsis 18-Oct-12 3:46am    
For the C++ library it is set to Win32, for the C# it is set to x86. So it is the same as I know.
skydger 18-Oct-12 4:01am    
I think I got the issue. Try to refer this book, chapter 9. http://fs1.bib.tiera.ru/content/dvd42/Heege%20M.%20-%20Expert%20C++.CLI.%20.NET%20for%20Visual%20C++%20Programmers(2007)(352).pdf
I think it could be useful.
Dávid Kocsis 18-Oct-12 4:11am    
Thanks, I will read it.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900