VB6からVC6++作DLLへ引数受け渡しがうまくいきません

解決


愛新  2004-02-18 01:15:32  No: 82092

##############################################
VC6側
struct aStruct
{
    int    lStart;
    int    lLen;
    char*  cFileName;
};
FCONVPROJREADWRITE_API short __stdcall fncRead(aStruct* pData,char* OutByte);
##############################################
VB6側
Public Type sInput
 lStart         As Long
 lLen           As Long
 cFileName      As String * 200
End Type
Public Declare Function fncRead Lib "FConvProjReadWrite.dll" (aData As sInput, ByVal oLineRead As Byte)
Private BBufR(0)        As Byte

With tsInput
  .lStart = 1
  .lLen = 1
  .cFileName = Space(200)
  .cFileName = Replace(InputFilePath, "\", "\\") & Chr(0)
End With
AnsDll = fncRead(tsInput, BBufR)

##############################################
と作ったのですが、VC側でデバッグをかけてみると、うまく格納していないみたいなのです。
結果が、
pData       0x0012f19c
├lStart    0
├lLen      4307969
└cFileName 0x00000001 ""
  └CX0030: Error: 式を評価できません
OutByte     0x0012f014 "■"
└          1 "■"

lStartに1 lLenに1 cFileNameにファイルのパス(日本語含む) のようになってほしいのですが、HPをまわっていろいろなパターンを試したのですがだめでした。
そして、引数のcFileNameを使い。
if((fp=fopen((*pData).cFileName,"rb"))==NULL){

としたいのですが、これも可能なのでしょうか?
指摘をよろしくお願いいたします。
最後ですが長文申し訳ありません。


ねろ  2004-02-18 05:34:33  No: 82093

構造体にString 型が入っていると面倒なんですよね。
とりあえずこの辺を読まれたし。
http://support.microsoft.com/default.aspx?scid=kb;ja;410837
ファイルパスとファイル名を渡すので有れば、それらのASCコードをLong型の
配列に入れてDLLに渡し、DLL側で文字列に変換する方法もあると思います。


愛新  2004-02-18 18:56:11  No: 82094

ありがとうございます。
これを見てまた色々試してみます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加