Обращаю Ваше внимание на то, что параметр abufsize должен быть входящим, а не исходящим - это передаваемое в функцию значение количества байт, которое Вы отводите под буфер answer. Но и после этого Ваш код не заработает. Я экспериментировал с разными типами и атрибутами параметра answer, и мне не удалось передать его как String. Моё работающее описание этого параметра в функции IC_reg выглядит так: ref StringBuilder answer. Полностью вызов функции в Вашем случае может выглядеть таким образом:
int abufsize = 32000;
StringBuilder text = new StringBuilder(abufsize);
res = IC_reg("127.0.0.1", "6666", IRBIS_ARM.IRBIS_ADMINISTRATOR, "1", "1", ref text, abufsize);
answer = text.ToString();
Вообще, Ваше описание функции IC_reg излишне усложнено преобразованиями параметров из неуправляемых типов в управляемые. Всё можно сделать проще
. Вот как прототип этой функции выглядит у меня:
[DllImport("irbis64_client",
EntryPoint = "IC_reg",
CharSet = CharSet.Ansi,
CallingConvention = CallingConvention.StdCall)]
// инициализация и регистрация клиента для работы с сервером
public static extern int IC_reg(string aserver_host,
string aserver_port,
char arm,
string user_name,
string password,
ref StringBuilder answer,
int abufsize);
Кстати, не лучше ли вместо создания собственной прослойки для вызова неуправляемых функций
irbis64_client.dll воспользоваться уже готовой библиотекой для работы с сервером ИРБИС64 напрямую из-под .NET, которую недавно выкладывали на этом форуме? Вот эта тема: [
irbis.gpntb.ru], я сейчас сам создаю новый управляемый клиент на C# с её помощью.