Sharepoint fails to load a C++ dll on windows 2008
- by Nathan
I have a sharepoint DLL that does some licensing things and as part of the code it uses an external C++ DLL to get the serial number of the hardisk.
When i run this application on windows server 2003 it works fine, but on 2008 the whole site (loaded on load) crashes and resets continually. This is not 2008 R2 and is the same in 64 or 32 bits.
If i put a debugger.break before the dll execution then I see the code get to the point of the break then never come back into the dll again. I do get some debug assertion warnings from within the function, again only in 2008, but im not sure this is related.
I created a console app that runs the c# dll, which in turn loads the c++ dll, and this works perfectly on 2008 (although does show the assertion errors, but I have suppressed these now).
The assertion errors are not in my code but within ICtypes.c and not something I can debug.
If i put a breakpoint in the DLL it is never hit and the compiler says :
"step in: Stepping over non user code"
if i try to debug into the DLL using VS.
I have tried wrapping the code used to call the DLL in:
SPSecurity.RunWithElevatedPrivileges(delegate()
but this also does not help.
I have the sourcecode for this DLL so that is not a problem.
If i delete the DLL from the directory I get an error about a missing DLL, if i replace it back to no error or warning just a complete failure.
If i replace this code with a hardcoded string the whole application works fine.
Any advice would be much appreciated, I can't understand why it works as a console app yet not when run by sharepoint, this is with the same user account, on the same machine...
This is the code used to call the DLL:
[DllImport("idDll.dll", EntryPoint = "GetMachineId", SetLastError = true)]
extern static string GetComponentId([MarshalAs(UnmanagedType.LPStr)]String s);
public static string GetComponentId()
{
Debugger.Break();
if (_machine == string.Empty)
{
string temp = "";
id= ComponentId.GetComponentId(temp);
}
return id;
}