Runtime error: application has requested runtime to terminate it in an unusual way - calling C# from C++

I have a C# DLL that uses SQLDMO and I have a C++ program that calls it.  I can run it in the debugger and the code goes through and calls the DLL and executes the function just like I would expect it to but when the function exits I get this error:

---------------------------
Microsoft Visual C++ Runtime Library
---------------------------
Runtime Error!

Program: C:\C# DLL\TestProgram2\Debug\TestProgram2.exe



This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.


---------------------------
OK  
---------------------------


any ideas?
LVL 1
emily_hallAsked:
Who is Participating?
 
ptmcompConnect With a Mentor Commented:
Did you compile it with UNICODE or ANSI option?
0
 
ptmcompCommented:
What call conventions are you using? How do you call from C++ to C#?
0
 
emily_hallAuthor Commented:
This is my C++ code:

::CoInitialize(NULL);

SetConnectionString(connectionString);
      
_DbClassPtr p;
p.CreateInstance("DatabaseLibrary.DbClass");
m_DLLInterfacePtr = p.GetInterfacePtr();

m_DLLInterfacePtr->loadStoredProcedureDetails(m_connectionString);

loadStoredProcedureDetails returns a bool but I have tried returning void and the same thing happens...
0
The new generation of project management tools

With monday.com’s project management tool, you can see what everyone on your team is working in a single glance. Its intuitive dashboards are customizable, so you can create systems that work for you.

 
ptmcompCommented:
Is m_connectionString a BSTR? Who allocates the memory and who is deallocating it?
0
 
emily_hallAuthor Commented:
m_connectionString is a char*.

and that is the code for the whole function - connectionString is passed in.

0
 
ptmcompCommented:
I think that's the problem COM usually marhals string as BSTR and not as char*. The process tries to free memory that it doesn't own.
0
 
emily_hallAuthor Commented:
A coworker of mine actually found the problem but we so far haven't been able to figure out how to fix it.  The problem isn't with that function but with the one that is called after it:

int machineId = m_DLLInterfacePtr->executeStoredProcedure("sp_GetMachineId", m_connectionString, (tagSAFEARRAY *)getMachineId, 3);

the problem is with the 3rd parameter which I typecast to a tagSAFEARRAY* in order to make it compile.  What that is is an array of struct.  On the other side, the C# is expecting an array of struct but it is dying when it tries to pass that through...

0
 
emily_hallAuthor Commented:
hey just going through my old questions trying to tidy things up.  thanks for the help.
0
All Courses

From novice to tech pro — start learning today.