VCで作成したDLLとの連携について

解決


さとう  2006-07-27 22:45:40  No: 96107

はじめまして、

VC++  6.0でDLLを作成して、VB6.0側でそのDLLを使用したいと考えています。

DLLの関数の戻り値及び引数がポインタで行う場合の、VB側でDLLを宣言する時の
引数の設定が分からないのです。

分かりにくいかもしれませんが、アドバイスお願いします。

***** VBのDLL宣言 *****

Declare Function Test Lib "Abc.dll" ( ??????????????? ) As Long

***** Abc.dll の演算部 *******

double *Test(int p, int n, double *x, double *y)
{
  double **A,  x1, x2;
  int i1;

  z = new double [n];

  for (i1;i1<n;i++)  

    A[i1] = x[i1];
    z[i1] = A[i1];
  }

return z;
}  

???? の定義をどうすれば良いかわからないのです。

以上、よろしくお願いします。


123  2006-07-27 22:57:03  No: 96108

intはLongでdoubleはDoubleで宣言すればよいかと
VBからの呼出は前に何もつけなければデフォルトで参照渡しとなります
逆に値私にしたい場合はByValを付けてください。


さとう  2006-07-28 01:08:43  No: 96109

アドバイスありがとうございます。

引き続きで申し訳ないのですが、
DLLの中身を作成して、リビルドをすると

error C2165: 'left-side modifier' : データへのポインタは変更できません。

とエラーになってしまいます。
エラーになっている所は、関数の宣言をしているところです。

申し訳ございませんが、どこが悪いのかアドバイスお願いします。

*TEST.cpp ファイル
TEST_API double _stdcall  *least(int m, int n, double *x, double *y)
{
  double **A, **w, *z, x1, x2;
      ・
      ・
      ・
return z;
}

*TEST.h  ファイル
#ifdef TEST_EXPORTS
#define TEST_API __declspec(dllexport)
#else
#define TEST_API __declspec(dllimport)
#endif

TEST_API double _stdcall  *least(int m, int n, double *x, double *y);


Blue  2006-07-28 20:10:12  No: 96110

一応こちらにも報告したほうがよいのでは?
http://madia.world.coocan.jp/cgi-bin/Vcbbs/wwwlng.cgi?print+200607/06070047.txt


Blue  2006-07-28 20:12:01  No: 96111

>一応こちらにも報告したほうがよいのでは?
なんか、いっていることが間違っていました。

あちらで解決したのをここにも報告したほうがよいのでは?

ということをいいたかったのでした。
まぁ、解決したのは DLL 作成時のエラーの消し方だけですが。


さとう  2006-07-28 20:50:17  No: 96112

お蔭様で解決しました。

いろいろアドバイスありがとうございました。


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

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






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