2015-02-25 2 views
1

Я создал .Net DLL с несколькими простыми классами. Я зарегистрировал DLL, используя RegAsm, и получил сообщение о том, что типы были успешно зарегистрированы.Как создать DLL C# .Net для использования в JavaScript

Regasm Синтаксис:

C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319> RegAsm.exe "D: \ Projects \ TestDLL.Core.dll"

C# Код:

namespace MyTestDLL.Core  
    { 
     public class PacketInfo  
     {  
      // constructor 
      public PacketInfo() 
      { 
      } 

      public string HostName { get; set; } 
      // and so on ...... 

     }  
    } 

Я установил для свойства ComVisible значение true в файле AssemblyInfo.cs этой библиотеки DLL. // [сборка: ComVisible (true)]

Однако, когда я создаю объект из него в JavaScript и запускаю скрипт в командной строке, я получаю либо не объект, либо нуль.

JS код:

var testObj = new ActiveXObject(MyTestDLL.Core.PacketInfo); 
 
     testObj.HostName = "Test";

Может кто-нибудь посоветовать мне, как решить эту проблему?

+0

Существует вопрос в Stack Overflow, который предлагает решение этого вопроса: http://stackoverflow.com/questions/858140/how-do-i-call-a-method-in-a-custom-activex- dll-using-java-vb-script – TejSoft

ответ

-2

мне удалось добиться того, что, добавив следующую строку в Мой DLL чуть выше класс,

[Guid("A32AB771-9967-4604-B193-57FAA25557D4"), ClassInterface(ClassInterfaceType.None)] 

Раньше у меня не было части ClassInterfaceType в моем коде. Также убедитесь, что каждый из ваших классов имеет уникальный GUID. FYI: Вы можете создать GUID с помощью GUI GUI GUI для Visual Studio Tools.

1

Вы должны добавить ProgId attribute к классу, что-то вроде этого:

[Guid("some guid that you will never change")] 
[ProgId("MyLib.PacketInfo")] // this is arbitrary 
public class PacketInfo  
{ 
    .... 
} 

GUID, не является обязательным, но если вы не установите его самостоятельно, это будет что-то не будет контролировать, поэтому лучше определить его. И, конечно же, я не добавлял ComVisible, потому что вы уже определили его на уровне сборки (я лично предпочитаю устанавливать его на уровне класса).

Затем, после регистрации, вы должны быть в состоянии использовать его, как это (используйте ProgID в виде строки):

var testObj = new ActiveXObject('MyLib.PacketInfo'); 
testObj.HostName = "Test"; 
+0

Спасибо за ваш комментарий. Позвольте мне попробовать это и обновить вас. – Vikineese

+0

Это не работает должным образом. Тем не менее, я получаю ту же ошибку, когда я запускаю js .. либо myObj имеет значение null, либо нет. Я сделал именно то, что вы предложили. Даже добавил атрибут COM Visible на уровне класса. – Vikineese

+0

Могут быть и другие проблемы. Вам нужно запустить regasm с аргументом/codebase, и вам также нужно убедиться, что ваш javascript работает с той же биттой, что и сборка (как x86, так и x64). –

 Смежные вопросы

  • Нет связанных вопросов^_^