Hi guys,
I tried several times to create a c# dll and call it in c++, but it never works and i don't know why.
Here is my code:
This is the code from the c# dll :
using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;
namespace MyInterop
{
[Guid("03AD5D2D-2AFD-439f-8713-A4EC0705B4D9")]
interface IMyDotNetInterface
{
void ShowCOMDialog();
}
[ClassInterface(ClassInterfaceType.None)]
[Guid("0490E147-F2D2-4909-A4B8-3533D2F264D0")]
class MyDotNetClass : IMyDotNetInterface
{
// Need a public default constructor for COM Interop.
public MyDotNetClass()
{}
public void ShowCOMDialog()
{
System.Windows.Forms.MessageBox.Show(“I am a" +
" Managed DotNET C# COM Object Dialog”);
}
}
}
After that I create a strong name key pair
sn -k TestKeyPair.snk
and write it in the AssemblyInfo.cs like this:
[assembly: AssemblyKeyFile("TestKeyPair.snk")]
THen i add it to the Gac:
gacutil /i MyInterop.dll
At last I Register my assembly for COM
REGASM MyInterop.dll /tlb:com.MyInterop.tlb
Now the c++ Code:
#import “<Full Path>\com.MyInterop.tlb" named_guids raw_interfaces_only
CoInitialize(NULL); //Initialize all COM Components
// <namespace>::<InterfaceName>
MyInterop::IMyDotNetInterfacePtr pDotNetCOMPtr;
// CreateInstance parameters
// e.g. CreateInstance (<namespace::CLSID_<ClassName>
HRESULT hRes =
pDotNetCOMPtr.CreateInstance(MyInterop::CLSID_MyDotNetClass);
if (hRes == S_OK)
{
BSTR str;
pDotNetCOMPtr->ShowCOMDialog ();
//call .NET COM exported function ShowDialog ()
}
CoUninitialize (); //DeInitialize all COM Components
I can load the tlb into the c++ Project, but my compiler says that
MyInterop::IMyDotNetInterfacePtr pDotNetCOMPtr;
is not a Member of MyInterop and he dowsn't know any Methods of this class.
PLeases help me or give me an example how to call an c# dll in a c++ project.
No one has replied yet! Why not be the first?
Sign in or Join us (it's free).