PC Review


Reply
Thread Tools Rate Thread

Casting problem with C# DLL

 
 
Greg
Guest
Posts: n/a
 
      21st Feb 2004
Not sure if this is best place for this problem, but here it is. I have a
project that is simply a C# class that interfaces with an IFilter. This is
so I can retreive the text from Word docs. I'm able to use this DLL without
any problems within my test windows app, but not within my windows service
(that's when I receive the casting exception).

Here's the code (sorry it's long):

VB Function within windows app and windows service:

Function OfficeFilter(ByVal fname As String) As String
Dim content As String
Dim ifilt As IFilters.DocFilters = CType(New IFilters.CFilter,
IFilters.DocFilters) 'Casting exception here in Windows Service, but not in
test app
Dim ipf As System.Runtime.InteropServices.UCOMIPersistFile =
CType(ifilt, System.Runtime.InteropServices.UCOMIPersistFile)
Try
ipf.Load(fname, 0)

Dim i As System.UInt32 = Convert.ToUInt32(0)
Dim ps As New IFilters.STAT_CHUNK
ifilt.Init(0, Convert.ToUInt32(0), Nothing, i)

Dim hr As Integer = 0
While hr = 0
ifilt.GetChunk(ps)

If ps.flags = IFilters.CHUNKSTATE.CHUNK_TEXT Then
Dim pcwcBuffer As System.UInt32 = Convert.ToUInt32(1000)
Dim hr2 As Integer = 0
While hr2 = IFilters.Constants.FILTER_S_LAST_TEXT OrElse
hr2 = 0
pcwcBuffer = Convert.ToUInt32(1000)
Dim sbBuffer As New System.Text.StringBuilder(1000)
hr2 = ifilt.GetText(pcwcBuffer, sbBuffer)
content &= sbBuffer.ToString
End While
End If
End While
Catch ex As System.Exception
Console.WriteLine(ex.Message)
'Return
End Try
ifilt = Nothing
ipf = Nothing
OfficeFilter = content
End Function 'OfficeFilter

DLL C# class:

using System;
using System.Text;
using System.Runtime.InteropServices;


namespace IFilters
{
[Flags]
public enum IFILTER_INIT
{
NONE = 0,
CANON_PARAGRAPHS = 1,
HARD_LINE_BREAKS = 2,
CANON_HYPHENS = 4,
CANON_SPACES = 8,
APPLY_INDEX_ATTRIBUTES = 16,
APPLY_CRAWL_ATTRIBUTES = 256,
APPLY_OTHER_ATTRIBUTES = 32,
INDEXING_ONLY = 64,
SEARCH_LINKS = 128,
FILTER_OWNED_VALUE_OK = 512
}


[Flags]
public enum IFILTER_FLAGS
{
OLE_PROPERTIES = 1
}

public enum CHUNK_BREAKTYPE
{
CHUNK_NO_BREAK = 0,
CHUNK_EOW = 1,
CHUNK_EOS = 2,
CHUNK_EOP = 3,
CHUNK_EOC = 4
}

[Flags]
public enum CHUNKSTATE
{
CHUNK_TEXT = 0x1,
CHUNK_VALUE = 0x2,
CHUNK_FILTER_OWNED_VALUE = 0x4
}


public enum PSKIND
{
LPWSTR = 0,
PROPID = 1
}


[StructLayout(LayoutKind.Sequential)]
public struct PROPSPEC
{
public uint ulKind;
public uint propid;
public IntPtr lpwstr;
}


[StructLayout(LayoutKind.Sequential)]
public struct FULLPROPSPEC
{
public Guid guidPropSet;
public PROPSPEC psProperty;
}


[StructLayout(LayoutKind.Sequential)]
public struct STAT_CHUNK
{
public uint idChunk;
[MarshalAs(UnmanagedType.U4)] public CHUNK_BREAKTYPE breakType;
[MarshalAs(UnmanagedType.U4)] public CHUNKSTATE flags;
public uint locale;
[MarshalAs(UnmanagedType.Struct)] public FULLPROPSPEC attribute;
public uint idChunkSource;
public uint cwcStartSource;
public uint cwcLenSource;
}


[StructLayout(LayoutKind.Sequential)]
public struct FILTERREGION
{
public uint idChunk;
public uint cwcStart;
public uint cwcExtent;
}


[ComImport]
[Guid("89BCB740-6119-101A-BCB7-00DD010655AF")]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
public interface DocFilters
{
void Init([MarshalAs(UnmanagedType.U4)] IFILTER_INIT grfFlags,
uint cAttributes,
[MarshalAs(UnmanagedType.LPArray, SizeParamIndex=1)] FULLPROPSPEC[]
aAttributes,
ref uint pdwFlags);

void GetChunk([MarshalAs(UnmanagedType.Struct)] out STAT_CHUNK pStat);

[PreserveSig] int GetText(ref uint pcwcBuffer,
[MarshalAs(UnmanagedType.LPWStr)] StringBuilder buffer);

void GetValue(ref UIntPtr ppPropValue);

void BindRegion([MarshalAs(UnmanagedType.Struct)]FILTERREGION origPos, ref
Guid riid, ref UIntPtr ppunk);

}


[ComImport]
[Guid("f07f3920-7b8c-11cf-9be8-00aa004b9986")]
public class CFilter
{
}

public class Constants

{
public const uint PID_STG_DIRECTORY =0x00000002;

public const uint PID_STG_CLASSID =0x00000003;
public const uint PID_STG_STORAGETYPE =0x00000004;

public const uint PID_STG_VOLUME_ID =0x00000005;
public const uint PID_STG_PARENT_WORKID =0x00000006;
public const uint PID_STG_SECONDARYSTORE =0x00000007;

public const uint PID_STG_FILEINDEX =0x00000008;
public const uint PID_STG_LASTCHANGEUSN =0x00000009;
public const uint PID_STG_NAME =0x0000000a;
public const uint PID_STG_PATH =0x0000000b;

public const uint PID_STG_SIZE =0x0000000c;
public const uint PID_STG_ATTRIBUTES =0x0000000d;
public const uint PID_STG_WRITETIME =0x0000000e;
public const uint PID_STG_CREATETIME =0x0000000f;
public const uint PID_STG_ACCESSTIME =0x00000010;
public const uint PID_STG_CHANGETIME =0x00000011;

public const uint PID_STG_CONTENTS =0x00000013;
public const uint PID_STG_SHORTNAME =0x00000014;

public const int FILTER_E_END_OF_CHUNKS
=(unchecked((int)0x80041700));
public const int FILTER_E_NO_MORE_TEXT
=(unchecked((int)0x80041701));
public const int FILTER_E_NO_MORE_VALUES
=(unchecked((int)0x80041702));

public const int FILTER_E_NO_TEXT
=(unchecked((int)0x80041705));
public const int FILTER_E_NO_VALUES
=(unchecked((int)0x80041706));

public const int FILTER_S_LAST_TEXT
=(unchecked((int)0x00041709));
}
}



 
Reply With Quote
 
 
 
Reply

Thread Tools
Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Problem with casting AMP Microsoft C# .NET 6 12th Sep 2006 05:58 PM
Casting problem Jim Stools Microsoft C# .NET 7 27th Jul 2006 08:50 PM
Down-casting of Typed Collection (Casting Generic Types?) conchur Microsoft C# .NET 1 3rd Jul 2006 11:45 AM
Casting Problem =?Utf-8?B?Q2FybG8gTWFyY2hlc29uaQ==?= Microsoft ASP .NET 6 18th Aug 2004 09:27 PM
casting problem Jeroen CEuppens Microsoft C# .NET 4 11th Dec 2003 03:10 PM


Features
 

Advertising
 

Newsgroups
 


All times are GMT +1. The time now is 06:36 AM.