YuOさん
回答ありがとうございます。
>>追加する機能が可能な事項は,どの程度の範囲なのですか。
現在は、とりあえず機能の追加が出来るプログラムを作成しています。
今後、大規模に拡張していく場合、
YuOさんのおっしゃるとおり、機能を絞っていくこと、または明確に定義する必要があると思います。
また、多くの方が返信してくださったソースコードを精読して、関数シグネチャを固定しなければいけないという意味がようやく理解できました。
ホスト側で実行する場合、受け皿となる関数ポインタを用意しないといけないのですね。
その関数ポインタのシグネチャとdLL側の関数シグネチャが一致している必要がある、と理解しました。
ですが、現状はとりあえず、関数シグネチャを固定して(例えば、引数は必ず2つで戻り値はint型)、関数の追加が出来るようなプログラムの作成を目指します。
sleepさん
回答ありがとうございます。
私が実装したいと思っていたソースコートを記載して頂きありがとうございます。
非常に簡潔に作成していただき、すんなり理解することが出来ました。
かずまさん
複数ソースコードを提示していただきありがとうございます。
私が実現したい内容に合致したコードでした。
ですが、私の知識不足で、提示していただきましたソースコード内に理解できない部分がありましたので、
質問させていただきます。
コード:
const char *d = getenv("SO_PATH");
string path = d ? d : ".";
上記の三項演算子の部分です。
dの中身があれば、pathに代入、dの中身が空の場合は”.”をpathに代入するという意味かなと思いました。
それを確かめるために、以下のコードを作成し実行しました。
sample.cpp
コード:
#include <iostream>
#include <string>
using namespace std;
int main(){
const char *d ;
string str= d ? d : "sorry";
cout<<str<<endl;
}
実行結果は以下です。
環境はVMWare Lubuntu g++です。
g++ sample.cpp
% ./a.out
AWAVA��AUATL�%V
文字化けしたものが出力されました。
string path = d ? d : "."; の部分について解説していただければ幸いです。
もう一点お願いします。
コード:
if (p) *p = '\0', v.push_back(name);
上記のif文の使い方は、私が知っているものと異なっており理解できませんでした。
カンマ演算子についていくつかサイトを調べましたが、結局理解できませんでした。
併せて回答いただければ幸いです。
よろしくお願いいたします。