2013-03-13 5 views
5

私は使用する必要のある関数宣言を含むtlbファイルを持っています。ネイティブC++プロジェクトでtlbファイルを使用する方法

私は

#import "type_library.tlb" 

を使用している場合、私はcorreclty自分のコードから関数を参照することができます

tlb_namespace::required_function(); 

をしかし、私は、リンカがtlb_namespace :: required_functionは、未解決の外部シンボルであると言うプロジェクトをコンパイル。

この種のプロジェクトをどのようにして正常に構築できますか?

EDIT

私はダミーVBA Accessプロジェクトで同じタイプライブラリを使用していました。タイプライブラリへの参照を追加しました。タイプライブラリに含まれる関数の一部が正しく呼び出されていることに気付きました。しかし、それらのうちのいくつかはそうではありません。 VBAによると、関連するDLLにエントリーポイントを見つけることはできません。

C++アプリケーションをビルドするときに未解決の外部シンボルについて説明できますか?

私は失敗した機能は、このようなTLBに宣言されていることも気づいています

UPPER_function_name 

が、DLL内では、このように宣言されています

Upper_function_name 

これが問題になることはできますか?

バイナリtlbファイルまたはdllを直接変更するこの種のエラーを解決することは可能ですか?

+0

は 'の#import "type_library.tlb" で解決されます'あなたのプロジェクトの中でこのtlbの#importディレクティブだけです。それは関数呼び出しと同じcppにありますか?生成された.tlhファイルと.tliファイルに 'required_function'がどのように定義されていますか? –

+0

@ZdeslavVojkovic今のところプロジェクトは非常に単純なものなので、#importは単なるもので、呼び出しの同じ.cppファイルにあります。私は.tlhと.tliファイルを生成しようとしました...プロジェクト\プロパティにプリプロセッサを生成する場合にのみ表示されます。しかし、私はおそらく別のリンカエラーが発生するので、私はおそらくプロジェクトに正しいモードでそれらを追加しないでください。 – sblandin

+0

を追加する必要はありません。あなたのリリース/デバッグフォルダにビルド中に作成されるので、そこを見てください。 –

答えて

3

IDEを使用してTLB情報を表示します。
How to: View Type Library Information

IDE:ビュー - >オブジェクトブラウザで、[...]をクリックします。カスタムコンポーネントセットを編集し、TLBファイルをブラウズして追加情報を表示します。

の名前空間を確認します。

+0

遅れてごめんなさい。オブジェクトブラウザでtlbファイルを開くと、いくつかの関数をグループ化するいくつかのモジュールを含む単一の名前空間を含むライブラリとして認識されます。私がネイティブC++プロジェクトでtlbを#importすると、関数だけを含む名前空間が得られます。 VBAプロジェクトでtlbへの参照を追加する前に私が言ったように、私は関数を呼び出すことができますが、ネイティブのC++プロジェクトではリンカーエラーが発生します。 – sblandin

0

リンカエラーを解決するために、名前空間を使用します。 例:名前空間<を使用して ます。#import "<>" raw_interfaces_only >

これが問題

関連する問題