2017-03-16 3 views
0

Navision 2009 SP1(Classic Client)のレポートを開発していますが、NAVで利用できない特別な機能の必要性が生じています。私はC#でCOM DLLを作成しているNavision C/AL C#COM dllでエラーを作成する

は、(バージョン対「自由」のInstallShieldを使用して)それをインストールし、NAVに自動変数を作成しました。クラスとインターフェイスが表示され、Printメソッドが表示されますが、変数を作成しようとすると次のエラーが発生します。

"OLEコントロールまたはオートメーションサーバーのインスタンスを作成できませんでした... .. OLEコントロールまたはオートメーションサーバーが正しくインストールされ、登録されていることを確認してください。

これはコード(単に接続行くを取得しようとしている)である:

[ComVisible(true), Guid("080a97fb-321c-4a2f-b948-dd52ce263415"), InterfaceType(ComInterfaceType.InterfaceIsDual)] 
public interface IPrinterTest 
{ 
    [DispId(1)] 
    bool Print(string test, string bytesInStringRepresentation); 
} 

[ClassInterface(ClassInterfaceType.None), ComVisible(true), Guid("8d7b85a9-1a20-4ea0-a7d4-decf26632eee"), ProgId("Printer.PrinterTest")] 
public class PrinterTest : IPrinterTest 
{ 
    public PrinterTest() 
    { 

    } 

    public bool Print(string test, string bytesInStringRepresentation) 
    { 
     return true; 
    } 
} 

本番環境でのみ.NET Frameworkのクライアントプロファイル(3.5および4.0)を持っている、これがします。regasmは4.0で(利用可能であることを意味し)、そしてガクチルはそうではないということです。

私は、NavisionでDLLを選択できるため、InstallShieldではなく、コードに問題があると想定しています。また、ナビゲーションオートメーション変数を作成しようとすると問題が発生します。

敬具

+0

私はここで起こっている下投票文化を理解していない、私は本当にしない。私の質問が満足できるものではないと感じたら、なぜ私のコメントにコメントしてみませんか?あなたが私が間違っていることを私に知らせなければ、私は改善できません。 – Starwop

+0

'CREATE(NameAutomationVariable)'行でエラーが発生しましたか? –

+0

はい、 "CREATE(NameAutomationVariable)"を実行するとエラーが発生します。 CREATEの結果を消費すると、常にfalseが返されます。 – Starwop

答えて

0

よしマーカスので、上記のコードと間違って何も、と明らかにVisual Studioがありませんまた、インストーラツールセットを持っています。

私は新しいソリューションを作成し、ライブラリプロジェクトを再作成し、InstallShieldプロジェクトの代わりにVSインストーラプロジェクトを追加しました。私はライブラリアセンブリが強力な署名をしていることを確認し、私が生成したTLBファイルをインストーラプロジェクトの "FileSystem"に追加しました。インストーラプロジェクトは自動的にTLBファイルを依存関係として登録するので、その後、「FileSystem」からTLBファイルを削除することができます。

このセットアップでは、COM interopのDLLを正しく登録することができました。

ので、覚えておくべき重要なポイントは以下のとおりです。あなたは、私がそうであるように同じ設定(インタフェースおよびクラス)をお持ちの場合

  • 、それらの両方がのComVisibleと公開されていることを確認してください。さらに、彼らは一致する名前を持つ必要があります。 "IPrinterTest" & "PrinterTest"。
  • アセンブリに強い署名があることを確認してください。
  • DLLのTLBファイルを生成し、インストーラ "FileSystem"に追加する必要があります。

私は、全体のプロセスを詳細にブログ記事で、後でこの回答を編集します。

関連する問題