4

私は熟練した Windows プログラマーではありませんが、長年にわたって 32 ビット Windows XP / Excel 用の XLL アドインを作成し、維持してきました。Windows 7/64 ビット バージョンを作成したいのですが、問題が発生しています。Generic.xll のサンプルを動作させることさえできません。

これが私が行ったことの最も単純なバージョンです-申し訳ありませんが、これは長くて衒学的です。

Visual Studio 2010 Professional がインストールされている Windows XP/32 マシンで:

  • Microsoft Excel 2013 SDK をダウンロードしてインストールしました。

  • スタート メニュー - 「Visual Studio x64 Cross Tools コマンド プロンプトを開く (2010)」

  • タイプを設定=リリース

  • SET PLATFORM=x64 // とにかくこれはあらかじめ設定されていたと思います

  • cd C:\2013 Office System Developer Resources\Excel2013XLLSDK\SAMPLES\FRAMEWRK

  • nmake // エラーなし

  • cd C:\2013 Office System Developer Resources\Excel2013XLLSDK\SAMPLES\GENERIC

  • nmake // エラーなし

  • 結果の C:\2013 Office System Developer Resources\Excel2013XLLSDK\SAMPLES\GENERIC\​​x64\RELEASE\GENERIC.xll を、Windows 7/64 コンピューターからアクセス可能なネットワーク フォルダーにコピーします。

Windows 7/64 コンピュータの場合:

  • エクセル2013を起動

  • ファイル - オプション - アドイン - Excel アドインの管理 - 参照、Generic.xll を含むネットワーク フォルダーに移動し、それをクリックします。

  • Excel が Generic.xll を標準フォルダーにコピーできるようにします。メッセージなしでサイレントに読み込まれます (Generic.xll が読み込まれたというメッセージは含まれません)。

  • Generic.xll の機能は表示されません。

  • Excel を閉じて再度開く - 再度開くと、「'GENERIC.xll' のファイル形式と拡張子が一致しません。ファイルが壊れているか安全でない可能性があります...」というメッセージ ボックスが表示されます (「はい」と答えると、テキスト ファイルのように読み込まれ、スプレッドシートに XLL のバイナリ コードが表示されます。)

以前の (Windows XP/32) XLL の経験に基づくと、このメッセージは、必要な DLL の不足を含め、ほとんどすべてを意味する可能性があります。そう、

Windows 7/64 コンピュータの場合:

  • Microsoft Visual C++ 2010 x64 再頒布可能パッケージ - 10.0.30319 をインストールします。影響なし。

  • Microsoft Visual C++ 2012 再頒布可能パッケージ (x64) - 11.0.51106 をインストールします。影響なし。

  • 「Steve P. Miller によって開発された Win64(x64) バージョン 2.2.600 用の Dependency Walker」を実行します。

  • ファイル - 開く - Generic.xll

  • 見つからないことを示しています:
    -- XLCALL32.DLL // XLL の動作に関する Windows XP の経験から典型的なもの
    -- API-MS-WIN-CORE-COM-L1-1-0.DLL
    -- API-MS-WIN -CORE-WINRT-ERROR-L1-1-0.DLL
    -- API-MS-WIN-CORE-WINRT-L1-1-0.DLL
    -- API-MS-WIN-CORE-WINRT-ROBUFFER-L1-1 -0.DLL
    -- API-MS-WIN-CORE-WINRT-STRING-L1-1-0.DLL
    -- API-MS-WIN-SHCORE-SCALING-L1-1-0.DLL
    -- DCOMP.DLL
    - - IESHIMS.DLL // XLL の動作に関する Windows XP の経験から典型的なもの

だから、今私は困惑しています。64 ビットに問題があると思っていましたが、Windows 7 に問題があるのではないかと考え始めています。

ヘルプ?

ありがとう、

ティム

4

2 に答える 2

2

これについて、いくつかのことを知っているようですね。XLCALL32 と依存関係の IESHIMS は問題ではありません。

私の推測では、これは 64 ビットの問題です。最終的に、 http://xll.codeplex.comで動作する 64 ビット ビルドを取得することができました。たぶん、あなたが役に立つと思う何かがそこにあるかもしれません。

于 2013-05-01T00:38:41.130 に答える
1

XLL ロード プロセスに注意してください。通常のプロセスによってロードされるコードを記述しているときに期待するのは、単純な DLL ロードではありません。

完全に動作するテスト プログラムを持っているが、Excel アドインに作業コードを追加すると、"このファイルは壊れているか安全でない可能性があります" というメッセージが表示される場合... 次のことをお勧めします。

  • ロード プロセス中に Excel が許可しない呼び出しの初期化コードを確認してください。

初期化中に、コードが Excel が好まない呼び出しを実行すると、無意味なエラー メッセージが表示され、アドインがテキスト ドキュメントとして再読み込みされます。残念ながら、私は Excel によって課せられた制限に関する詳細について宿題をしていません。ただし、一般的には次のことがわかりました。

  • この問題は、初期化を遅らせることで非常に簡単に解決できます。

これまでのところ、AutoOpen イベントが便利であることがわかりました (もっと良い方法があるかもしれませんが、見つけたら教えてください)。次の概念をうまく使用して、この問題を回避しました。

// within the AutoLoad event handler
static bool init_completed = false;
if ( init_completed == false )
{
   initialize_all();    
   init_completed = true;
}

これにより、Excel は XLL を正常に読み込むことができます。AutoLoad イベントが呼び出されるまでに、Excel はコードに制限を課していないように見えます - 初期化コードの実行を許可します。

繰り返しになりますが、AutoLoad イベントは最適な場所ではない可能性があります (YMMV)。より良いものを見つけたら、このページを更新してください。

次回この間違いを犯したときに、このページをすぐに見つけられることを真剣に願っています!

于 2015-03-07T19:35:50.290 に答える