ich arbeite an einem Projekt, in dem MemBrain im Rahen eines Excel 2007-AddIn zum Einsatz kommen soll. Die MemBrain-Funktionalität wird eingebunden über ein Modul, das den DLLImport übernimmt.
In Übertragung des VB-Aufrufs
Code: Select all
Private Declare Function MB_GetVersionInfo Lib "MEMBRAINDLL.dll" _
Alias "__MB_GetVersionInfo@8" (ByVal infoStr As String, ByVal maxLen As Long) As Long
Code: Select all
using System.Runtime.InteropServices;
namespace MemBrainConnector
{
public partial class MemBrainConnector
{
[DllImport("MemBrainDll.dll", EntryPoint = "__MB_GetVersionInfo@8")]
public static extern long MB_GetVersionInfo(ref string infoStr, long maxLen);
/// ...
}
}
Code: Select all
public void ButShowDllVersion_Click()
{
long result = 0;
long strLength = 50;
string myVersion = "\0";
try
{
result = MB_GetVersionInfo(ref myVersion, strLength);
}
catch (Exception e)
{
Console.WriteLine("{0} Exception caught.", e);
}
if (result == 0)
Console.WriteLine(myVersion.ToString());
else
HandleDllError();
}
Das Problem:
Bei der Ausführung endet das Programm mit der Abarbeitung der Zeile
Code: Select all
result = MB_GetVersionInfo(ref myVersion, strLength);
Der Aufruf mit dem ref-Schlüsselwort ist aus meiner Sicht notwendig, weil die Funktion die Versions-Information in myVersion schreibt, was nur erfolgt, wenn das Argument als Verweis übergeben wird.
Wird "ref" im Code gelöscht, wird die Funtion zwar abgearbeitet (?), aber myVersion enthält keine Versionsinformation. Als result wird der Wert "11602252854722560" - als ein Fehler - zurückgegeben.
Der analog realisierte Aufruf von MB_GetNetCount() scheint ordnungsgemäß zu funktionieren, was wohl daran liegt, dass diese keine Argumente benutzt.
Wenn ich die gleiche Funktion in der Musteranwendung MBInputQualify_Excel_2007.xlsm aufrufe gibt MB_GetVersionInfo eine richtige Information zurück.
Was läuft da falsch???
Danke für hilfreiche Anmerkungen.
Gruß HoMi12