VC++.NET(2003)の環境でDLLを作成し、VB6.0でその関数を実行してもらおう
と下記プログラムを作成しました。内容はVBのString型で文字列"ABC"を
入力した時には、"15"を返すというものです。
そのDLLの関数の動作確認をVC++.NETで行おうとしましたが、
コンパイル時の文字列の型エラーやリンクエラーでなかなか上手くいかず、
頭を抱えております。
VC++.NETでの動作確認用(DLL呼び出し側)のソースコードについて、
どのようにコーディングしたらよいのでしょうか?
もしくは、DLL作成用のソースコードに誤った点がありましたら、
ご指摘下さい。
int VCSAMPLE_API __stdcall SampleMain(BSTR n)
{
int num;
char tmp[10];
::ZeroMemory(tmp, 10);
int i = WideCharToMultiByte(CP_ACP, 0, n, SysStringLen(n),
tmp, sizeof(tmp)-1, 0, 0);
if(tmp == "ABC") {
num = 15;
return num;
}
}
以上、宜しくお願い致します。
相手がVB6.0であれば、BSTRではなく普通にLPCSTRで受けれます。
よって、
int WINAPI Test(LPCSTR text)
{
if (strcmp(text, "ABC") != 0) // 文字列の比較は == じゃ出来ん。(ポインタの比較になるので)
retrun 15;
return -1; // ABCじゃなかったらどうなるのかわからんので適当。
}
で、VB側は
Private Declare Function Test Lib "XXX.dll" (ByVal text As String) As Long
で動くはず。
間違えました。
>if (strcmp(text, "ABC") != 0)
if (strcmp(text, "ABC") == 0)
strcmpの戻り値が 0 のとき文字列が等しいのでした。
上記、ご指摘通りLPCSTR型に修正したら解決できました。
Blueさん、ご回答ありがとうございました。
ツイート | ![]() |