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
__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