Help me!!!

M

morice

I have writen a dll(EmrCmprs.dll) using c++ and a function in this DLL:

__declspec(dllexport) long EmrDecompress( char *pcCompressData /*in*/,
long lCompressDataSize/*in*/,
char **ppcRawData/*unicode out*/,
long *plRawDataSize/*out*/ )
{
...
}

Then,i invoke the function(EmrDecompress) in dotframework:

[DllImport("EmrCmprs.dll")]
private static extern int EmrDecompress_BYTE(
byte[] pSrc,
int iSrcLen,
[MarshalAs(UnmanagedType.LPWStr)]
ref string pDst,
ref int iDstLen );

private void Test_Click(object sender, System.EventArgs e)
{
byte[] pSrc ;
int iSrcLen;
string pDst = null;
int iDstLen = 0;

try
{
// -- open file
FileStream fsRead = new FileStream(@"c:\chu0.DAT" ,
FileMode.Open , FileAccess.Read ,
FileShare.ReadWrite);

// -- get data
iSrcLen = (int)fsRead.Length;
pSrc = new byte[fsRead.Length];
fsRead.Read(pSrc , 0 , (int)fsRead.Length);

// -- close file
fsRead.Close();


int iResult = EmrDecompress(pSrc,iSrcLen,ref pDst,ref iDstLen);


if(iResult != 0)
{
throw new Exception("Decompress is failed!");
}
}
catch (Exception ex)
{
throw ex;
}
}

But i get error pDst and right iDstLen!
(In C++,the function of EmrDecompress do right thing.)
I think the following parameter is not right:
[MarshalAs(UnmanagedType.LPWStr)]
ref string pDst
but how to modify it ?
I try again and again,but failed!

Can you help me?

Thanks in advance!

Morice
 
D

Dmitriy Lapshin [C# / .NET MVP]

Hi,

I've seen numerous advices to use StringBuilder whenever you pass strings by
ref. You can try this in your example.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top