Использование VS2008 C# Я пытаюсь объединить dll C++. Имейте конструктор класса C++: make_summarizer (const char * rdir, const char * lic, const char * key); Необходимо сохранить ссылку на объект, который был создан, чтобы я мог использовать его в последующей функции. Когда я сделал это в JNI, код c: объявить статический указатель на объект: static summaryizer * summrzr; Затем в одной из функций я назвал этот конструктор следующим: summrzr = make_summarizer (crdir, clic, ckey); Где все параметры, где требуется тип const char *;C# Interop with dll
Так в C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Configuration;
namespace SummarizerApp
{
class SummApp
{
private IntPtr summarzr;
public SummApp()
{
string resource_dir = ConfigurationManager.AppSettings["resource_dir"];
string license = ConfigurationManager.AppSettings["license"];
string key = ConfigurationManager.AppSettings["key"];
createSummarizer(resource_dir, license, key);
}
[System.Runtime.InteropServices.DllImportAttribute("lib\\summarizer37.dll", EntryPoint = "#1")]
public static extern IntPtr make_summarizer(
[InAttribute()][MarshalAsAttribute(UnmanagedType.LPTStr)] string rdir,
[InAttribute()][MarshalAsAttribute(UnmanagedType.LPTStr)] string lic,
[InAttribute()][MarshalAsAttribute(UnmanagedType.LPTStr)] string key);
public void createSummarizer(string resource_dir, string license, string key)
{
try
{
this.summarzr = make_summarizer(resource_dir, license, key);
}
catch (AccessViolationException e)
{
Console.WriteLine(e.Message);
Console.WriteLine(e.StackTrace);
}
}
Пытались также с помощью IntPtr создана при Marshal.StringToHGlobalAnsi (строка). Несмотря на это, я получаю AccessViolationException в строке, где я вызываю собственный конструктор;
Так что я делаю неправильно? Джим
OK установите значение НаборСимволов, как описано выше. Проверял ординальную базу, и оказалось, что она №4. Теперь я получаю диалог, в котором говорится: «Ошибка выполнения!» Новая ошибка = прогресс Я всегда говорю, спасибо –
почему это вообще (#n) - почему бы не позволить названию сделать работу за вас – pm100
Я также считаю, что LPStr - правильный тип, а не LPCTstr – pm100