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

わんくま同盟

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

C# と VB.NET の入門サイト


■93202 / )  Re[8]: C#でC++DLLコマンドを実行
□投稿者/ サラリーマンZ (8回)-(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 ::〜の後に付けられるのはクラス名/名前空間だけです、と表示されてしまいます。




返信 編集キー/


管理者用

- Child Tree -