c# dll kann nicht in c++ Code initialisiert werden
-
Hallo zusammen,
ich habe mir eine C#-DLL geschrieben, die mir die TabellenNamen aus einer Excel Datei list, jedoch stürtz mein programm immer beim Initialisieren des Pointers ab.
Hier der C# Code:
using System; using System.Linq; using System.Text; using System.Data; using System.Data.OleDb; using System.Collections.Generic; using System.Runtime.InteropServices; namespace ExcelWrapper { [InterfaceType(ComInterfaceType.InterfaceIsDual)] public interface IReadExcel { string[] GetWorksheetNames(string strExcelFilePath); }; [ClassInterface(ClassInterfaceType.None)] [ProgId("ExcelWrapper.ReadExcel")] public class ReadExcel : IReadExcel { public string[] GetWorksheetNames(string strExcelFilePath) { OleDbConnection con = new OleDbConnection(); con.ConnectionString = "Data Source=" + strExcelFilePath + ";Provider=Microsoft.Jet.OLEDB.4.0" + ";Extended Properties=Excel 8.0"; con.Open(); DataTable tab = con.GetOleDbSchemaTable( OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" }); con.Close(); string[] tableNames = new string[tab.Rows.Count]; for (int i = 0; i < tab.Rows.Count; i++) { tableNames[i] = tab.Rows[i]["Table_Name"].ToString(); } return tableNames; } } }
Bei meinem C# Projekt purzelt eine ExcelWrapper.dll raus und diese wandel ich mit tlbexp in ExcelWrapper.tlb um. Diese binde ich in mein schon vorhandenes C++ Projekt ein:
#import "ExcelWrapper.tlb" raw_interfaces_only using namespace ExcelWrapper;
Und ruf es dann so auf:
HRESULT hr = CoInitialize(NULL); IReadExcelPtr ptr(__uuidof(ReadExcel)); SAFEARRAY **test; bstr_t str("Excel.xls"); ptr->GetWorksheetNames(str.GetBSTR(), test); CoUninitialize();
bei der zweiten Zeile stürzt mein programm ab mit folgender Fehlermeldung:
First-chance exception at 0x000007fefdca940d in test_exact.exe: Microsoft C++ exception: [rethrow] at memory location 0x00000000..
First-chance exception at 0x000007fefdca940d in test_exact.exe: Microsoft C++ exception: _com_error at memory location 0x00b7a690..
Unhandled exception at 0x000007fefdca940d in test_exact.exe: Microsoft C++ exception: _com_error at memory location 0x00b7a690..Jedoch finde ich dazu keine LÖsung!
Hat jemand eine Idee, was ich falsch mache? bin total ratlos!
vielen Dank schonmal!
viele Grüße,
Bianca
-
Pass deinem code c++ an, und schreib die dll neu.