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


TK@Delphi初心者  2005-05-20 20:43:19  No: 14865  IP: [192.*.*.*]

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  IP: [192.*.*.*]

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

編集    削除
TK@Delphi初心者  2005-05-20 23:52:26  No: 14867  IP: [192.*.*.*]

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

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

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

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

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

編集    削除
kkk  2005-05-21 01:09:15  No: 14868  IP: [192.*.*.*]

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

編集    削除
kkk  2005-05-21 01:18:31  No: 14869  IP: [192.*.*.*]

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

編集    削除
TK@Delphi初心者  2005-05-23 19:36:06  No: 14870  IP: [192.*.*.*]

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

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

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

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

編集    削除
にしの  2005-05-23 19:41:11  No: 14871  IP: [192.*.*.*]

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

編集    削除
kkk  2005-05-23 20:40:39  No: 14872  IP: [192.*.*.*]

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

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

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

編集    削除
kkk  2005-05-23 21:55:26  No: 14873  IP: [192.*.*.*]

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

編集    削除