2

皆さん、

最初のC++/ CLIプロジェクト(Visual Studio 2008)を作成しました。これは、C#アプリがPOSタリープリンターにアクセスできるようにするためのライブラリです。

私のライブラリはうまく構築されており、C#exeから呼び出されると簡単な関数が機能します。

ただし、WinGDI呼び出し(この場合はDeleteObject)を含めるとすぐにリンカーは「未解決のトークン」エラーで文句を言います。

エラー2エラーLNK2028:未解決のトークン(0A000088) "extern" C "int __stdcall DeleteObject(void *)"(?DeleteObject @@ $$ J14YGHPAX @ Z)関数 "private:__ clrcall ReceiptPrinter :: Epson ::〜Epson( void) "(?? 1Epson @ ReceiptPrinter @@ $$ FA $ AAM @ XZ)ReceiptPrinter.obj ReceiptPrinter

私は過去4年間、深刻なC ++を実行していません。また、MS C ++コンパイラの経験がほとんどないため、リンカー設定で何を探しているのかわかりません。

どんな助けでも大いに受け取られます。

ありがとう

4

3 に答える 3

7

追加の依存関係は「NoInherit」でした。設定の「下」を見ると、ライブラリのリストがあり、gdi32.libがリストに含まれていました。「親プロジェクトから継承」をチェックしたところ、動作するようになりました。ダーク、あなたが答えとしてそれをすべて追加するなら、私はそれを選択してあなたに担当者を与えるでしょう。

Gdi32.libがリンカーコマンドライン([プロパティ]>[リンカー]>[コマンドライン])にあるかどうかを確認します。

(そこに行きます-あなたは私の利己的な、魂の一部を求めている担当者に首尾よく訴えました;))

于 2009-04-11T12:28:17.687 に答える
3

dllをGdi32.libにリンクする必要があります。

これは、#pragma comment(lib、 "gdi32.lib")を使用するか、プロジェクトの[リンカー]の下の設定で行うことができます。

于 2009-04-11T12:22:18.123 に答える
2

手がかりは、関数宣言の__clrcall修飾子にあります。Windowsフォームアプリは、デフォルトで純粋な共通言語ランタイムコードと呼び出し規約を使用します。リンクしている外部ライブラリはリンクしていません。プロジェクトプロパティの[プロジェクトのデフォルト]領域にある共通言語ランタイムのサポート設定を/clr:pureから/clrに変更する必要があります。それは私のために働いた。

于 2011-10-24T13:32:19.143 に答える