ASPからDelphiで作成したDLLを呼び出すには?


TK@Delphi初心者  2005-05-20 20:43:19  No: 14865

Delphiで作成したDLLをMicrosoftのASPから利用しようとしています。

しかし、ASP側でインスタンスを生成しようとした時に、
「クラス文字列が無効です」というエラーになってしまいます。

そこで、レジストリへの登録を試みたのですが、
「c:\abc.dll は読み込まれましたが、DllRegisterServer エントリポイント
が見つかりませんでした。このファイルが登録されていない可能性があります。」
と怒られてしまいます。

Delphi の Win32プログラムからは同一のフォルダに入れておけば、正常に
呼び出せます。また、ASP からbasp21などのDLLは普通に呼び出せます。

たぶん、DLLの作り方が悪いのだとは思うのですが、なにぶん初心者なもので
解決できずにいます。

よろしければ、皆さまのお知恵を拝借させていただけないでしょうか?
意味不明の部分が多々あるかと思いますが、どうぞよろしくお願いいたします。

【環境】
WinXP Pro + IIS5.1
ASP は .NET以前のもの。スクリプトは VBScript。
Delphi は2005アーキテクトのトライアル版で、Win32のDLLウィザードで作成

【DLLのソース】ご参考まで。
library abc;

uses
  SysUtils,
  Classes;

{$R *.res}

// 関数
function getMasterStrings(strCode: Char):String;

var
  strMString : string;

begin

      case strCode of
      '1' : strMString := 'ドロンジョ';
      '2' : strMString := 'ボヤッキー';
      '3' : strMString := 'トンズラー';
      else
          strMString := 'とりあえず、ドロンジョで。';
      end;

      Result := strMString;

end;

exports
      getMasterStrings name 'get_ms';

begin
end.


kkk  2005-05-20 21:41:37  No: 14866

DLLでDelphiのstringを返すことは出来ません。
以下のページ参考になりませんか。
https://www.petitmonte.com/bbs/answers?question_id=1978


TK@Delphi初心者  2005-05-20 23:52:26  No: 14867

kkkさん、お返事ありがとうございます。

で、初心者なものでちょっとよく分からないので、教えてください。

ご指摘いただいた内容が原因で、DLLのインスタンシングはできなくなる、
ということでしょうか?

それとも、私の疑問点とは別に、私がやろうとしていることには
ご指摘のような問題点を内包しているよ、ということでしょうか?

変な質問をしてしまい、申し訳ありません。


kkk  2005-05-21 01:09:15  No: 14868

Delphiにおけるstringは独自のメモリ管理を行っています。
そのためVC,VB等のほかの言語では Delphiのstringを扱うことが出来ません。
またDLLの呼び出し元がDelphiで作成されたソフトであっても共用メモリマネージャである BORLNDMM.DLLを使用しなければなりません。
一般的には PCharかBSTR型(TBstr)を使用します。


kkk  2005-05-21 01:18:31  No: 14869

追伸)
呼び出し規約も適切に設定してください。
stdcall/safecall/cdecl等があります。
詳しくはHelpを参照してください。


TK@Delphi初心者  2005-05-23 19:36:06  No: 14870

おはようございます。
ご回答ありがとうございます。

しかし、このエラーはそういう問題ではないと思うのですが。

ちなみにStringを使わないDLLも作ってみましたが
結果は同じです。

「クラス文字列が無効です」というのはDLLに足りない部分があるか、
インストールの仕方が間違っているとしか思えないのですが
違うのでしょうか?


にしの  2005-05-23 19:41:11  No: 14871

クラスとして使用したいのであれば、ActiveX DLLで作成してみてはどうでしょう。


kkk  2005-05-23 20:40:39  No: 14872

>ちなみにStringを使わないDLLも作ってみましたが結果は同じです。
動く・動かないい関係なく DLLでDelphiのstringを引数に使用するのは良くありません。

>「クラス文字列が無効です」というのはDLLに足りない部分があるか
というのは stringの使用とは全く関係がありません(別の要因です)。

オブジェクトとしてVBScriptから呼び出したいなら[にしの]さんのおっしゃるようにActiveX DLLを作成する必要があるでしょう。


kkk  2005-05-23 21:55:26  No: 14873

これとは違うかな?
http://www.wwlnk.com/boheme/delphi/techdoc/dad0030.html


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

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






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