VB.netからC++/CLIへの移植がうまくいきません。その2

huahi11115 455 評価のポイント
2024-06-03T06:03:44.0666667+00:00

以下のVB.netソース(正常に動作する)を移植しようとしています。

やりたいことは、2つの異なるクラスのインスタンス間で通信したいのです。

そのために、共通にアクセスできる構造体を媒介しています。

C++/CLIでコンパイルが通るようにする方法を教えて下さい。よろしくお願いします。

■VB.net

Class MainWindow

Private Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded

  Dim ins01 As New class1

  class100.ins1 = ins01

  Dim ins02 As New class2

  class100.ins2 = ins02

  Stop

End Sub

End Class

Public Structure class100’媒介用

Public Shared Property ins1 As class1

Public Shared Property ins2 As class2

End Structure

Public Class class1

Public Property s1 As Single = 0.4

End Class

Public Class class2

Public Property s2 As Single = 2.8

End Class

■C++/CLI

value struct class100 { //この構造体の移植の方法がわかりません。

//プログラムのすべての箇所でclass100->ins1->s1等にアクセスできる必要があります。

public:

 **static class1^ ins1;**

 **static class2^ ins2;**

};

ref class class1 {

public: float s1=0.4;

};

ref class class2 {

public: float s2=2.8;

};

int main(arraySystem::String^^ args){

  class1^ ins01 = gcnew class1;  //正常動作する

  **//この下の行 「->ins1」の箇所でインテリセンスが効かないので文法エラーとなりコンパイルできない**

/ class100-> ins1 = ins01;/**

 return 0;

}

開発者向けテクノロジ C++
開発者向けテクノロジ .NET その他
{count} 件の投票

承認済みの回答
  1. gekka 12,206 評価のポイント MVP ボランティア モデレーター
    2024-06-03T08:47:29.8633333+00:00

    こんな

    #ifndef PCH_H
    #define PCH_H
    
    // プリコンパイルするヘッダーをここに追加します
    
    ref class class1 {
    public:
        float s1 = 0.4;
    };
    
    ref class class2 {
    public:
        float s2 = 2.8;
    };
    
    value struct class100 {
    public:
        static class1^ const ins1 = gcnew class1{}; //フィールドで
    
    private:
        static class2^ const m_ins2 = gcnew class2{};
    public:
        static property class2^ ins2 //プロパティで
        {
            class2^ get() { return m_ins2; }
        }
    };
    
    #endif //PCH_H
    
    
    #include "pch.h"
    #include <iostream>
    
    using namespace System;
    
    void print()
    {
        std::wcout << L"ins1.s1=" << class100::ins1->s1 << L"\tins2.s2=" << class100::ins2->s2 << std::endl;
    }
    
    int main(array<System::String^>^ args)
    {
        print();
        class100::ins1->s1 = -1.234;
        class100::ins2->s2 *= 1e10;
        print();
        return 0;
    }
    
    1 人がこの回答が役に立ったと思いました。

0 件の追加の回答

並べ替え方法: 古い順

お客様の回答

回答は、質問作成者が [承諾された回答] としてマークできます。これは、ユーザーが回答が作成者の問題を解決したことを知るのに役立ちます。