Я создал файл DLL с помощью C# Utils.dll которые функционируют содержание строку_замены в классе StringUtils. Функция успешно вызывается и дает результат при вызове в консольном приложении. Теперь я включил DLL-файл в папку plugins/ansi в NSIS.Вызов функции внешней библиотеки DLL в NSIS
Я пытался вызвать функцию как:
Utils.StringUtils::replace_string "E:\\test\\test.txt" 'abcd' 'efgh'
Я также попытался с помощью CLR
CLR::Call /NOUNLOAD Utils.dll Utils.StringUtils replace_string 3 "E:\\test\\test.txt" 'abcd' 'efgh'
И снова с системой вызова
System::Call 'Utils::StringUtils.replace_string("E:\\test\\test.txt", "abcd", "efgh");'
Но я получил ошибки в то время как компиляция файла nsi. Какова может быть правильная реализация функции в DLL-файле в NSIS?
C# Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.IO;
namespace Utils
{
public class StringUtils
{
public StringUtils()
{
}
///
/// Replace the data in the Huge files searching and replacing chunk
/// by chunk. It will create new file as filepath + ".tmp" file with
/// replaced data
///
/// Path of the file
/// Text to be replaced
/// Text with which it is replaced
public static void replace_string(string filePath, string replaceText, string withText)
{
StreamReader streamReader = new StreamReader(filePath);
StreamWriter streamWriter = new StreamWriter(filePath + ".tmp");
while (!streamReader.EndOfStream)
{
string data = streamReader.ReadLine();
data = data.Replace(replaceText, withText);
data = Regex.Replace(data, replaceText, withText);
streamWriter.WriteLine(data);
}
streamReader.Close();
streamWriter.Close();
}
public static void print_text()
{
Console.WriteLine("test");
Console.ReadKey();
}
}
}
Программа консольного приложения:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Utils;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
StringUtils.replace_string("E:\\test\\test.txt", "abcd", "efgh");
//Class1.print_text();
}
}
}
Здесь я назвал функцию строку_замены из консольного приложения и успешно выполняется, и дать правильный результат, где, как при вызове в NSIS выводит ошибку.
система: : Звонок знает только о простых функциях C/Win32 ... – Anders
Как насчет второго примера использования CLR для меня не работает тогда ... – NavaStha
Просто сказать, что это не работает, не помогает, нам нужно знать сообщения об ошибках компилятора и т. Д. ... – Anders