2009-12-04 4 views
0

VBA (Access 2003)를 사용하고 있으며 IFilter 메커니즘을 사용하여 파일의 텍스트 콘텐츠를 추출하고 싶습니다. 나는 비교적 쉽게 보이게 몇 가지 멋진 C++ sample code를 찾았지만 그 순간에 난 일을 LoadIFilter에 DLL 호출을받을 수 없습니다VB에서 IFilter 사용

Declare Function LoadIFilter Lib "query.dll" (ByVal pwcsPath As String, _ 
    ByVal pUnkOuter As Object, ByRef ppIFilter As Object) As Integer 

Public Sub DocEx() 
    Dim ifilter As Object 
    Dim hresult As Integer 

    hresult = LoadIFilter("C:\temp\test.txt" & Chr(0), Nothing, ifilter) 
    Debug.Print hresult 
End Sub 

HRESULT 항상 E_FAIL (= 16,389)이다.

DLL 구문이 잘못 되었습니까? 아니면 다른 것입니까?

편집 할 내용 : 결국이 문제를 해결하지 못했습니다. 그러나 필자의 유일한 목적은 내부 스크립트를 해킹하는 것이므로 Microsoft Platform SDK와 함께 번들로 제공되는 FiltDump.exe 도구를 호출하고 해당 출력을 구문 분석하는 것으로 충분합니다. (약간 어색하지만, 특히 FiltDump.exe가 stderr 대신 stdout에 에러 메시지를 출력하라고 주장한 이후로 특히 그렇습니다!)

답변

1

LoadIFilter()는 레지스트리를 조사하여 어떤 IFilter를로드 할 지 찾습니다 , 그리고 나서 그것을 로딩한다 (발견 된 클래스 id에 대해 CoCreateInstance()를 호출 할 가능성이 높다). 아무 것도 잘못 될 수 있습니다. 레지스트리에 .txt 확장자에서 클래스 ID 로의 매핑이 없거나 해당 클래스 ID에 대한 COM 서버가로드되지 않을 수 있습니다.

가장 좋은 방법은 Process Monitor을 사용하여 IFilter가로드 할 항목을 찾고 적어도로드하려고 시도하는지 확인하는 것입니다.

+1

좋은 생각, 고마워. 비교할 올바른 구현을 위해 Windows SDK에서 테스트 도구를 찾았습니다. http://msdn.microsoft.com/en-us/library/ms692563(VS.85).aspx –