C#的dll已经用Regasm指令注册过了 
现在情况是 dll必须和exe在同一个目录下, 才可以正常调用
不在同一目录下 就提示找不到文件
调用dll的代码如下: var
  aClass: Variant;
begin
  CoInitialize(nil); ;
  aClass:= CreateOleObject('NewProject.Test');
  aClass.ShowForm;
  aClass:=Unassigned;
  CoUnInitialize;
end;
有哪位高人知道 麻烦指点一下 谢谢~

解决方案 »

  1.   

    是COM对象?
    那注册时应该把DLL路径写到注册表中了啊,找找是不是正确的路径
      

  2.   

    那就不知道什么原因了
    按照自动化COM对象的用法,即使是用脚本也能调用这个对象,而不管你DLL与vbs文件是不是放一起.可以重新建个对象,写一个最简单的方法,show个messagebox测试一下
      

  3.   

    You were definitely closer with your second attempt as you can't load a .NET assembly as if it was a normal C-style DLL. If you're getting "Class not registered" error messages in Delphi it simply means the required registry entries were not available.To use your C# class as a COM object, the best thing to do is put all your methods in one or more interfaces then make the class implement each of those interfaces. 
    Example:
    Code:
    // IAddInterface.cs
    public interface IAddInterface
    {
        int Add(int i1, int i2);
    }Code:
    // SimpleDll.cs
    using System.Runtime.InteropServices;[ClassInterface(ClassInterfaceType.None)]
    public class SimpleDLL : IAddInterface
    {
        public int Add(int i1, int i2)
        {
            return i1+i2;
        }
    }Compile using: 
    Code:
    csc /t:library /out:SimpleDll.dll *.cs
    Next, register the assembly as a COM object in the registry using: 
    Code:
    regasm SimpleDll.dll /tlb:Add.tlb
    (The above command will also generate a type library for use in Delphi.)Now you can switch over to Delphi, and click Project->Import Type Library (like you did before). Select your .tlb (Add.tlb in this case) and click Create Unit.In your main unit add "ComObj" and "SimpleDLL_TLB" (or whatever your generated unit is called) to your uses list and write the code to call your .NET methods. Example:
    Code:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      intfRef: IAddInterface;
      result: Integer;
    begin
      intfRef := CreateComObject(CLASS_SimpleDLL_) as IAddInterface;
      result := intfRef.Add(2, 2);
    .
    .
    For it to work your Delphi .exe needs to be in the same directory as the .NET DLL.
    =============================
    国外论坛上找的 最后一句话 太打击人了 ~~~~~~  郁闷
      

  4.   

    果然很打击人,
    copy那几个dll过来吧~
      

  5.   

    如果实在不行的话,把DLL作为资源形式加到EXE里面,运行的时候释放到当前目录加载……
      

  6.   

    会楼上 如果这样的话 dll就没有存在的意义了