tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルreturn値で
記事No12341
投稿日: 2008/05/23(Fri) 11:24
投稿者VB
return値は、数値しか返せないのでしょうか?
VC++のDLLで
char *a;
a = "ABC"
return *a;
てな感じで文字の1文字目を整数にして返すやり方はあるみたいですが。
実際に文字を全部返すことって出来ないんですかね・・・。
何か良い方法があれば宜しくお願い致します。

[ツリー表示へ]
タイトルRe: return値で
記事No12344
投稿日: 2008/05/23(Fri) 12:54
投稿者よねKEN
> return値は、数値しか返せないのでしょうか?

普通に返せますよ。

Public Function FuncTest() As String
    FuncTest = "あいう"
End Function

のような感じです。

[ツリー表示へ]
タイトルRe^2: return値で
記事No12345
投稿日: 2008/05/23(Fri) 14:03
投稿者VB
たとえばVC++で
  _declspec(dllexport) char WINAPI test(const TEST* TEST)
{
    char FuncTest;
    FuncTest = "あいう";
    return FuncTest;
}
上記のような式をっ書いて(↑ちなみにエラーですが・・・。)

VBでそのreturn値をもらう時。
dim return as integer
return = test(TEST)
こんな感じの文になって、数値しか受け取れないですよね?!

[ツリー表示へ]
タイトルRe^3: return値で
記事No12346
投稿日: 2008/05/23(Fri) 14:15
投稿者neptune
こんにちは

VS6用のMSDNに
「Microsoft Visual Basic Version 5.0 で使用する DLL の開発に関する注意 」
と言う記事の中に
文字列の受け渡しのサンプルがあります。

[ツリー表示へ]
タイトルRe^4: return値で
記事No12347
投稿日: 2008/05/23(Fri) 14:43
投稿者VB
それが見れない環境でして(^^;

[ツリー表示へ]
タイトルRe^5: return値で
記事No12348
投稿日: 2008/05/23(Fri) 15:07
投稿者魔界の仮面弁士
BASP21.DLL のように、String を返す関数は作れますよ。
(もっとも BASP21 は、Declare で使うよりも参照設定して使う方が楽ですが)

> それが見れない環境でして(^^;
ヘルプ無しで開発できるというのが凄いかも。(^^;

で、それは(ローカル版MSDNだけではなく)インターネット上の MSDN サイトにも
ある情報ですが、やはり、見る事ができないのでしょうか?

http://www.microsoft.com/japan/msdn/vs_previous/vbasic/docs/dll/
http://support.microsoft.com/kb/410837/ja

[ツリー表示へ]
タイトルRe^3: return値で
記事No12352
投稿日: 2008/05/23(Fri) 16:42
投稿者
こんな感じではだめなんでしょうか?

Function Test(strT AS String) As String
   Test = "あいうえお"
End Function

[ツリー表示へ]
タイトルRe^4: return値で
記事No12365
投稿日: 2008/05/26(Mon) 11:02
投稿者VB
VC++で下記のように書いてみました。
  _declspec(dllexport) char WINAPI test(struct DLL* PINFO)
{
    char test[] = "あいう";
    return (char)test;
}
この時点で(char)testの値は文字化けしてしまっています。

VBで下記のように書きました。
Public Declare Function test Lib "test.dll" (PINFO As DLL) As String
Dim str As String
str = test(PINFO(0))
VBで受け取ったときにNULLが入って返ってきてしまいます・・・。

どのようにすれば、VC++で代入した文字列がそのままVBで受け取れるのでしょう?

[ツリー表示へ]
タイトルRe^5: return値で
記事No12366
投稿日: 2008/05/26(Mon) 12:29
投稿者魔界の仮面弁士
>     char test[] = "あいう";
>     return (char)test;
> この時点で(char)testの値は文字化けしてしまっています。

文字列の受け渡しをする場合は、VB 側で管理された変数領域に対して、
DLL 側から値を書き込んでいく、という手法が一般的です。
(そのため、戻り値ではなく、引数を使って処理される事が多いです)

上記では、char test[] をそのまま返そうとしているようですが、その配列メモリを
管理しているのは DLL 側であって、VB 側では無い事に注意してください。

もし、VB 側から String 型で受け取れるようにしたいのであれば、
char[] ではなく、BSTR (OLECHAR FAR * )を使うようにしてください。

http://www2.wbs.ne.jp/~kanegon/doc/bstr.txt

[ツリー表示へ]
タイトルRe^6: return値で
記事No12370
投稿日: 2008/05/26(Mon) 15:00
投稿者VB
> もし、VB 側から String 型で受け取れるようにしたいのであれば、
> char[] ではなく、BSTR (OLECHAR FAR * )を使うようにしてください。
VC++に詳しくないので端折らないで書いてもらえると・・・。(^^;

[ツリー表示へ]
タイトルRe^7: return値で
記事No12375
投稿日: 2008/05/26(Mon) 16:17
投稿者魔界の仮面弁士
> > もし、VB 側から String 型で受け取れるようにしたいのであれば、
> > char[] ではなく、BSTR (OLECHAR FAR * )を使うようにしてください。
> VC++に詳しくないので端折らないで書いてもらえると・・・。(^^;

私はあなた以上に詳しくないので、端折るしか無いです…。(^^;

VB なら詳しいですが、C++ はソースを書くどころか、読む事すらできないレベルですし。

[ツリー表示へ]
タイトルRe^8: return値で
記事No12377
投稿日: 2008/05/26(Mon) 16:43
投稿者VB
> VB なら詳しいですが、C++ はソースを書くどころか、読む事すらできないレベルですし。
そうでしたか。
了解しました。

では、分かる方にこの質問を以降します。
VC++で
char test[] = "あいう";
return (char)jname;
ではなく

BSTR (OLECHAR FAR *)で
宣言すれば良いと魔界の仮面弁士様から教えて頂いたのですが。
上記の宣言をこれを使って宣言し直した時
変数名など入れて書けるかたいましたら宜しくお願いいたします。
そもそもreturn (char)jname;←これの書き方もあっていないような気がします。(^^;
そこのところも分かりましたら宜しくお願いいたします。

[ツリー表示へ]
タイトルRe^9: return値で
記事No12379
投稿日: 2008/05/26(Mon) 17:21
投稿者neptune
こんにちは

いや、だから弁士さんご紹介の
http://www.microsoft.com/japan/msdn/vs_previous/vbasic/docs/dll/
http://support.microsoft.com/kb/410837/ja
に文字列の受け渡しのサンプルもありますから、先にそこを見てくださいよ。

[ツリー表示へ]
タイトルRe: return値で
記事No12380
投稿日: 2008/05/26(Mon) 17:57
投稿者K.J.K.
> VC++で下記のように書いてみました。
>   _declspec(dllexport) char WINAPI test(struct DLL* PINFO)
> {
>     char test[] = "あいう";
>     return (char)test;
> }

_declspec(dllexport) BSTR WINAPI test(struct DLL*PINFO)
{
    return SysAllocStringByteLen("あいう", 6);
}

# まぁ例なのでしょうが、型に"DLL"という名前をつけるのはいかがなものかと。

[ツリー表示へ]
タイトルRe^2: return値で
記事No12381
投稿日: 2008/05/26(Mon) 18:13
投稿者VB
> _declspec(dllexport) BSTR WINAPI test(struct DLL*PINFO)
> {
>     return SysAllocStringByteLen("あいう", 6);
> }
ありがとうございます。

> # まぁ例なのでしょうが、型に"DLL"という名前をつけるのはいかがなものかと。
仰るとおり例ですから。。(隣人にも言われました。(^^;))
大目に見てくださいな。。

[ツリー表示へ]