2

フォームにコントロールを追加すると、Primary Interop Assembly (PIA) が作成されるサード パーティからの ocx があります。PIA は、ActiveX API を .NET アセンブリに公開します。

私が見つけた奇妙なことは、ソリューションがデバッグに設定されている場合、ソリューションがリリースに設定されている場合と比較して、いくつかの機能が欠落していることです。Debug フォルダーと Release フォルダーの PIA のメタデータが異なる

リリース:

#Region "Assembly AxInterop.DATARAYOCXLib, Version=1.1.0.0, Culture=neutral, PublicKeyToken=null"
' C:\Users\...\Instruments\obj\x86\Release\AxInterop.DATARAYOCXLib.dll
#End Region

Imports System
Imports System.ComponentModel
Imports System.Runtime.InteropServices
Imports System.Windows.Forms

Namespace AxDATARAYOCXLib
    <AxHost.Clsid("{43555bb9-3fe0-11d6-9f4a-00a0cc40a4d2}")> <DefaultEvent("SendMessage")> <DesignTimeVisible(True)>
    Public Class AxGetData
        Inherits AxHost

    Public Overridable Function IsDataReady(index As Short) As Boolean

デバッグ:

#Region "Assembly AxInterop.DATARAYOCXLib, Version=1.1.0.0, Culture=neutral, PublicKeyToken=null"
' C:\Users\...\Instruments\obj\Debug\AxInterop.DATARAYOCXLib.dll
#End Region

Imports System
Imports System.ComponentModel
Imports System.Runtime.InteropServices
Imports System.Windows.Forms

Namespace AxDATARAYOCXLib
    <AxHost.Clsid("{43555bb9-3fe0-11d6-9f4a-00a0cc40a4d2}")> <DefaultEvent("SendMessage")> <DesignTimeVisible(True)>
    Public Class AxGetData
        Inherits AxHost

    ' IsDataReady is missing

さまざまな構成でさまざまな API をターゲットにするにはどうすればよいですか? 最近、サード パーティ ソフトウェアを最新バージョン (IsDataReady を含まない) に更新し、デバッグ フォルダーとリリース フォルダーの両方の dll を削除して再構築しました。dll は戻ってきますが、Release にはまだ IsDataReady が表示されます。これを解決する良い方法は何ですか?

私はこれを試しました...

  • ソリューションをリリースに設定
  • PIA (AxInterop.DATARAYOCXLib.dll および Interop.DATARAYOCXLib.dll) への参照を削除しました。
  • フォームを開き、プログラム ファイルの ocx にあるツールボックスにコントロールを追加しました。このアクションにより、PIA (AFAIK) が作成され、参照が追加されます。
  • 削除された bin および obj フォルダー
  • 建てる
  • API を確認してください。IsDataReady はあります

次に、代わりにソリューションをデバッグに設定した後、すべての手順を繰り返しました。IsDataReady はありません。

ベンダーに連絡したところ、この機能は非推奨であり、最新の ocx には含まれていないとのことでした。ただし、Release でビルドするときは間違いなく表示されます。

4

1 に答える 1