| 皆様、いろいろアドバイス有難うございました。 結局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 ::〜の後に付けられるのはクラス名/名前空間だけです、と表示されてしまいます。
|