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.


Anmelden zum Antworten