I have to use a C++ DLL file from an ASP.NET site. The site will be hosted on both 32 and 64 bits environments.
I have a 32 and 64 bits version of the unmanaged DLL file. How do I import the methods from the correct one according the current server architecture?
Like someone posted, this could be handled as a deployment problem. My concern is: the web application consuming this DLL file is huge, and we don't have a deployment document. No one will remember to deploy the correct DLL file, so I'm trying to remove the human factor from the solution :)
Simplest approach would be to give the two native libraries the same filename in two different directories, then adjust your application DLL search path depending on the bitness.
http://www.pinvoke.net/default.aspx/kernel32.setdlldirectory
To get the compiler/framework to do most of the work you need to
List the different implementations for your functions according to platform, including different dll names if you need to have both installed at once.
#if __WIN32
public delegate int Move(int target);
[DllImport("my.dll", SetLastError = true, CharSet = CharSet.Auto)]
#elif __X64
public delegate int Move(int target);
[DllImport("my64.dll", SetLastError = true, CharSet = CharSet.Auto)]
#endif
Otherwise you can use loadlib and manage the marshalling yourself.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With