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

huahi11115 335 評価のポイント
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;

}

.NET
.NET
.NET ソフトウェア フレームワークに基づく Microsoft テクノロジ。
71 件の質問
C++
C++
C プログラミング言語の拡張機能として作成された高レベルの汎用プログラミング言語。低レベルのメモリ操作機能に加えて、オブジェクト指向、汎用、関数型の機能を備えています。
23 件の質問
{count} 件の投票

承認済みの回答
  1. gekka 9,916 評価のポイント 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 件の追加の回答

並べ替え方法: 最も役に立つ

お客様の回答

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