c++初心者のtaktakでよろしくご教授お願いします。
vbでdllを呼び出し(Declare Function)、引数として整数値(Long型)を渡します。
結果(戻り値)として、文字列(String型)を取得したいのですが?
現在dllを作成していますが、どうも文字列をreturnで返すところで、コンパイルエラーが発生
します。
vb側の例)vbでdll呼び出し、ret=get_message(1)で、retにテストを戻せるようなdllを考
えています。
dll開発途中の構文
MESSPC_API __stdcall get_message(int cnt)
{
static char *retValue;
switch (cnt){
case 1:retValue = テスト;
break;
}
return retValue;
}
設計的にみて妥当な設計かどうか疑問があります。
通常文字列を扱う際には、dllの関数をコールする前にバッファを用意しておいて、
そのポインターをパラメータに設定してやります。(要するにバッファの先頭
アドレスを渡す)
dllの関数側ではそのバッファに文字列を書き込んでやります。
この設計ではだめなのでしょうか。
初心者と公言されているので、定石の回答をしてみました。
なお、VBの文字列とVC++の文字列の互換性を保つことをお忘れなく。
少なくとも、戻り値の型を記述するべきでは。
コンパイルエラーをなくすには。
まあ、実際はいもちぃさんがおっしゃるようにしたほうがいいと思いますけど。
ご回答ありがとうございます。
設計的にみて妥当な設計かどうか疑問があります。
通常文字列を扱う際には、dllの関数をコールする前にバッファを用意しておいて、
そのポインターをパラメータに設定してやります。(要するにバッファの先頭
アドレスを渡す)
dllの関数側ではそのバッファに文字列を書き込んでやります。
↑↑↑↑↑↑↑↑↑
すみませんが、この場合はどのような記述をすれば宜しいのでしょうか。
ご教授お願いします。
プロトタイプ 宣言
void get_message(int ,char *);
呼び出し側
void main(void)
{
int cnt;
char message[128];
cnt = 1;
get_message(cnt,message)
}
呼び出される側
void get_message(int cnt,char *msg)
{
switch (cnt){
case 1:msg = テスト;
break;
}
}
こんなかんじ 多少構文間違っていたらごめんなさい
無事解決致しました。
ご教授くださった皆さま、どうもありがとうございました。