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?
 
ptmcompCommented:
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
Cloud Class® Course: Amazon Web Services - Basic

Are you thinking about creating an Amazon Web Services account for your business? Not sure where to start? In this course you’ll get an overview of the history of AWS and take a tour of their user interface.

 
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
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.