コンパイラ : VIsual Studio 2012 RC
C関数は以下のように実装されています。
//greet.h
#ifndef DEF_GREET
#define DEF_GREET
const wchar_t* greet(const wchar_t* name);
#endif
//greet.cpp
#include "greet.h"
#include
const wchar_t* greet(const wchar_t* name)
{
static wchar_t result[256];
wcscpy_s(result, 256, name);
wcscat_s(result, 256, L"さん、こんにちは");
return result;
}
次に前回登場したConvString.hの出番です。
ConvString.hがバグが無いことを確認してください。
CLRプロジェクト(GreetLib)を作成します。以下のコードを用意します。
//GreetLib.h
#pragma once
using namespace System;
public ref class GreetLib
{
public:
static String^ Greet(String^ name);
};
//GreetLib.cpp
#include "GreetLib.h"
#include "greet.h"
#include "ConvString.h"
String^ GreetLib::Greet(String^ name){
std::wstring input = ConvertCLIString::ToWideString(name); //CLI文字列をstd::wstringに変換
std::wstring result = greet(input.c_str() ); //greet関数を呼び出す
return ConvertCLIString::WideStringToCLI(result); //std::wstringをCLI文字列に変換
}
ビルドしてエラーもなかったら成功です。このGreetLibはVisual Basic/C#から参照できるのでWindows フォームアプリケーションでテキストボックス(2個)とボタンを設定して以下のプログラム(VB)を記述します。
Public Class Form1
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
ResultText.Text = GreetLib.Greet(NameText.Text)
End Sub
End Class
テキストボックスに「○○さん、こんにちは」と表示されていたら成功です。