Home All Groups Group Topic Archive Search About

convert string type from managed to unmanaged

Author
4 Oct 2006 3:46 PM
Yoavo
Hi,
I have an UmManaged DLL which contains an exported function:
extern "C"
{
    _declspec(dllexport)BSTR get_DocName();
}

I want to call this function from a managed DLL.
This is the declaration in the managed DLL:
#pragma once
#include <vcclr.h>
using namespace System;
using namespace System::Text;
using namespace System::Runtime::InteropServices;

[DllImport("C:\\EManaged.dll", EntryPoint="get_DocName")]
extern string get_DocName();
namespace EManaged {
      public ref class Class1
      {
            // TODO: Add your methods for this class here.
      };
}

I get the following error:
error C2146: syntax error : missing ';' before identifier 'get_DocName

what am I doing wrong ?
Note that if I change the return type of DocName to int, the code compiled
OK.

Yoav

Author
4 Oct 2006 7:57 PM
Mattias Sjögren
>what am I doing wrong ?

There's no string type defined. Perhaps you meant to use String^ as
the return type?

Anyway I guess a more correct declaration would be

[DllImport("C:\\EManaged.dll", EntryPoint="get_DocName",
CallingConvention=CallingConvention::Cdecl)]
[returnvalue: MarshalAs(UnmanagedType::BStr)]
extern String^ get_DocName();


Mattias

--
Mattias Sjögren [C# MVP]  mattias @ mvps.org
http://www.msjogren.net/dotnet/ | http://www.dotnetinterop.com
Please reply only to the newsgroup.

AddThis Social Bookmark Button