C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.93202 の関連記事表示

<< 0 >>
■93202  Re[8]: C#でC++DLLコマンドを実行
□投稿者/ サラリーマンZ -(2019/11/27(Wed) 22:32:30)
    皆様、いろいろアドバイス有難うございました。
    結局C#でC++のDLLを読み込んでコマンドを実行させるのがどうしてもうまくいかず、
    あきらめてC++のDLLのコマンドを実行させる動作をさせる関数を作って、
    その関数をDLLとしてコンパイルして、DLLのコマンドを動作させるためのDLLを作って
    そのDLLをC#で実行させようと考えました。

    C++ DLLのコマンドを動作させるソースを元に下記のようなコードを書きました↓

    source.cpp

    #include "Header.h"
    #include <stdio.h>
    #include <Windows.h>
    #include <process.h>
    #include <time.h>
    #include <fstream>
    #include <vcclr.h>//外部ファイル実行用(キャスト)

    #include "Drive01.h"
    #pragma comment(lib, "Drive01.lib")

    ConnectParameter CP;

    void Open()
    {
    WSADATA wsadata;
    int rc;

    rc = WSAStartup( 0x0101, &wsadata );
    if( rc != 0 )
    { return; }

    sprintf_s( CP.Addr1, "%s", "192.168.1.1" );
    CP.Port1 = 9999;
    sprintf_s( CP.Addr2, "%s", "192.168.1.2" );
    CP.Port2 = 9999;

    LPHOSTENT PC_lpHost = gethostbyname(CP.Addr1 );
    CP.my.sin_family = AF_INET;
    CP.my.sin_addr = *((LPIN_ADDR*PC_lpHost->h_addr_list);
    CP.my.sin_port = htons( CP.Port1 );

    LPHOSTENT MP_lpHost = gethostbyname(CP.Addr2 );
    CP.dst.sin_family = AF_INET;
    CP.dst.sin_addr = *((LPIN_ADDR*PC_lpHost->h_addr_list);
    CP.dst.sin_port = htons( CP.Port2 );

    //コマンド実行
    Connect(CP);
    }


    header.h

    #pragma once
    #define DllExport __declspec( dllexport )

    extern "C"
    {
    DllExport void Open();
    }


    ↑この内容でDLLとしてビルドしようとすると、
    fatal error C1190: マネージ ターゲット コードには '/clr' が必要です、のエラー内容で
    ビルドができませんでした。

    vcclr.h の中身を見てみると #using <mscorlib.dll> の構文でエラーが出ていて
    using には C++/CLIモードが必要ですと出てしまいます。

    具体的にどのように対策したら良いのでしょうか?

    vcclr.h の中身みると他にもエラーが出ていて

    typedef const System::Char* __const_Char_ptr;
    typedef const System::Byte* __const_Byte_ptr;
    typedef System::Byte* _Byte_ptr;
    typedef const System::String* __const_String_handle;

    unsigned offset = System::Runtime::CompilerServices::RuntimeHelpers::OffsetToStringData;

    の System ::〜の後に付けられるのはクラス名/名前空間だけです、と表示されてしまいます。



記事No.92947 のレス /過去ログ161より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -