1

64ビットのExcel2010を使用してVBAから登録および使用できるオブジェクトライブラリを構築しようとしています。DevStudio2008を使用しています。これは64ビットの問題だと思います。以前のバージョンのExcel(XP)。[アセンブリ情報情報]ダイアログで[COMを表示する]をクリックし、ビルドタグで[COM相互運用機能に登録]をクリックしました。ターゲットタイプをx64に設定すると、参照ダイアログにライブラリがまったく表示されません。[任意のCPU]を選択すると登録できますが、インスタンス化しようとすると「アクティブXオブジェクトを作成できません」というエラーが表示されます。

namespace Tester
{
    [Guid("D6F88E95-8A27-4ae6-B6DE-0542A0FC7039")]
    [InterfaceType(ComInterfaceType.InterfaceIsDual)]
    public interface _Numbers
    {       
        int GetDay();
        int GetMonth();
        int GetYear();
        int DayOfYear();
    }

    [Guid("13FE32AD-4BF8-495f-AB4D-6C61BD463EA4")]
    [ClassInterface(ClassInterfaceType.None)]
    [ProgId("Tester.Numbers")]
    public class Numbers : _Numbers
    {
        public Numbers(){}

        public int GetDay()
        {
            return(DateTime.Today.Day);
        }

        public int GetMonth()
        {
            return(DateTime.Today.Month);
        }

        public int GetYear()
        {
            return(DateTime.Today.Year);
        }

        public int DayOfYear()
        {
            return(DateTime.Now.DayOfYear);
        }
    }
}
4

1 に答える 1

1

Visual Studioは32ビットプロセスであるため、64ビットアセンブリを登録するために32ビットバージョンのregasm.exeが誤って実行されます。もちろん、そのバージョンはregasm.exeレジストリの32ビット部分に書き込むため、機能しません。

この問題を解決する1つの方法は、ターゲットアセンブリで64ビットバージョンをregasm.exe自分で実行することです(ビルド後の手順など)。オプションを使用してタイプライブラリをエクスポートする必要が/tlbあります。また/codebase、アセンブリはGACに存在しないため、オプションを渡す必要があります。

"%SystemRoot%\Microsoft.NET\Framework64\v2.0.50727\regasm.exe"
    /tlb /codebase "$(TargetPath)"
于 2011-04-24T05:49:11.680 に答える