Frage

Ich habe ein COM-Objekt, das ich versuche, in eine C # -Klasse einzuwickeln, um es für andere Anwendungen leichter zur Verfügung zu stellen, die es konsumieren möchten.

Ich habe den folgenden Code, der eine Instanz des COM-Objekts erstellt, und die Verwendung von Reflexion ist anrufen, um Benutzerdaten abzurufen. Dieser Code funktioniert gut, wenn er sich in einer ASPX-Seite befindet. generasacodicetagpre.

Wenn ich jedoch den Code in eine Klassendatei (jd_api.cs) verschiebe, um ihn von der eigentlichen Website abzuwählen, kann ich ihn nicht mehr zur Arbeit bringen. Zum Beispiel habe ich die folgende statische Methode, die als solcher deklariert ist: generasacodicetagpre.

Leider ist das Serverobjekt auf einige ASP.NET-Bibliotheken beschränkt, die standardmäßig in Webanwendungen enthalten sind, und so war der obige Code ein Nein. An diesem Punkt entschied ich mich also, eine Instanz des COM-Objekts wie solcher zu erstellen: generasacodicetagpre.

Bei der Laufzeit erhalte ich jedoch einen Fehler, der besagt, " hat versucht, einen geschützten Speicher zu lesen oder zu schreiben. Dies ist häufig ein Hinweis darauf, dass andere Speicher beschädigt ist. ".

Ich bin nicht sicher, wohin ich von hier ausgehen soll. Jede Hilfe, wie Sie abstrakte, um ein Beispiel dieses COM-Objekts an eine Ebene zu erstellen, die sich nicht innerhalb der Webanwendung selbst befindet, würde erheblich geschätzt werden. Danke !!

War es hilfreich?

Lösung

Declare DLL functions within a class. Then define a static method for each DLL function you want to call. The following code sample creates a wrapper named Win32MessageBox that calls the MessageBox function in User32.dll each time a .NET app calls the object Show method. It requeres the System.Runtime.InteropServices namespace.

using System;
using System.Runtime.InteropServices;

class Win32MessageBox
{
    [DllImport("user32.dll")]
    private static extern int MessageBox(IntPtr hWnd, String text,
        String caption, uint type);

    public static void Show(string message, string caption)
    {
        MessageBox(new IntPtr(0), message, caption, 0);
    }
}

To call it, just type:

Win32MessageBox.Show("StackOverflow!", "my stack box");

The method where you call the above line doesn't need to be aware that it's a actually calling a function in an unmanaged DLL.

Resources: the MCTS Self-Paced Training Kit (Exam 70-536) by Tony Northrup.

Andere Tipps

Hove you tried usinsing interoperating

I've done the following in the past (working from memory so you might need to fiddle with this a bit):

  1. Right Click "References" in your project
  2. Select "Add Reference"
  3. Selelct the "Com" Tab
  4. Find and add your Com Instnace

In your class file

using yourComName;

public static string GetUserName() 
{
        yourComName.yourComClass jdObj = new  yourComClass();
        string username = jdObj.GetUserName(someParameters);
        return username;
}

Hope this a) works and b) helps!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top