Re: How to pass strings from VC++.exe to C#.dll
On Sep 17, 6:01 pm, ragh...@gmail.com wrote:
On Sep 16, 10:03 pm, "Giovanni Dicanio"
<giovanniDOTdica...@REMOVEMEgmail.com> wrote:
<ragh...@gmail.com> ha scritto nel messaggionews:a70d6395-1bef-43db-93d=
d-cdbad0e5d24a@x35g2000hsb.googlegroups.com...
I have to pass a string from VC++.exe to C#.dll
void main()
{
CoInitialize(NULL);
MyInterop::IMyDotNetInterfacePtr pDotNetCOMPtr;
WCHAR str[] = _T("C:\\Debugging\\MyInterop\\MyInterop\\bin\\=
Debug\
\rag.xml");
If you are passing a WCHAR string, better making it explicit with L"...=
"
instead of _T():
WCHAR str[] = L"C:\\Debugging\....";
HRESULT hRes =
pDotNetCOMPtr.CreateInstance(MyInterop::CLSID_MyDotNetClass);
if (hRes == S_OK)
{
pDotNetCOMPtr->ShowDialog (str);
Have you stepped in this code using a debugger?
Is the above pDotNetCOMPtr->ShowDialog(str) statement executed?
Would it be possible that hRes is not a success code, so the call to
ShowDialog() method is not executed?
Moreover, would it be possible to you to check failure and success usin=
g
proper COM helper macros like FAILED() and SUCCEEDED() ?
e.g.
if ( SUCCEEDED( hRes ) )
... OK
Moreover, usually strings in COM are passed using BSTR (which is basica=
lly a
WCHAR Unicode string with string length prefixed).
So, should you pass a BSTR instead of a simple WCHAR* to the COM interf=
ace?
HTH,
Giovanni- Hide quoted text -
- Show quoted text -
Thanks for reply Giovanni Dicanio
I solved it this way
In C# .dll i changed the functon definition to
public string ShowDialog(StringBuilder str)
{
Then string myString2 = str.ToString(); //It worked fine in VC
++.exe the string type is WCHAR
}
Now i have to return a string from C#.dll which is a COM component and
receive it in VC++.exe.I am not sure on how to do this
i changed the syntax to
public string ShowDialog(StringBuilder str)
{
string dest ="C:\\RAGHU\\rag.xml";
return dest;
}
In Vc++ .exe
int _tmain(int argc, _TCHAR* argv[])
{
CoInitialize(NULL);
MyInterop::IMyDotNetInterfacePtr pDotNetCOMPtr;
WCHAR str[] = _T("C:\\cellOpcServer\
\195CellOpcServerConf_00.xml");
HRESULT hRes =
pDotNetCOMPtr.CreateInstance(MyInterop::CLSID_MyDotNetClass);
WCHAR pretval;
if (SUCCEEDED(hRes))
{
pretval = pDotNetCOMPtr->ShowDialog(str);//giving error in this
statement
}
CoUninitialize ();
return 0;
}
I am not sure how to return string from C#.dll to VC++.exe .I am new
to comprogramming can u please tell me how to fix this