DLL, a C#

0

Witam
Napisałem zewnętrzną DLL w języku C i za pomocą PInvoke importuje ją do projektu w C#. Na moim komputerze wszystko działa jednak na każdym innym wyświetlany jest błąd. Najpierw wkleję poniżej kody.

Kod wywołujący funkcję z zewnętrznej DLL w C#:

[DllImport("SimpleScanA0DLL.dll", CharSet = CharSet.Ansi)]
        private static extern int ScanB( string filename, int mode, int dpi, int width, int height);

        public void StartScanA0()
        {
            string test = "test.bmp";
            int k = ScanB( test, 0, 200, 400, 600);
            if(k == -99)
            {
                slog.Info("Bląd przy otwieraniu biblioteki skanera.\n");
            }
           
            else if (k == 0)
            {
                slog.Info("Skanowanie zakonczylo sie powodzeniem.\n");
            }
            else
            {
                slog.Info("Wystapil nieznany błąd.\n");
            }
        }   

Kod w języku C:

extern "C"
{
	_declspec(dllexport) int __stdcall ScanB(char* filename, int mode, int dpi, int width, int height)
	{
		char m = 'C';
		if (mode == 0) {
			m = 'G';
		}
		return Scan(filename, m, dpi, width, height);
	}
}

Komunikat błędu:
"System.DllNotFoundException: Nie można załadować biblioteki DLL 'SimpleScanA0DLL.dll': Nie można odnaleźć określonego modułu. (Wyjątek od HRESULT: 0x8007007E)
w SimpleScanA0.A0DLL.ScanB(String filename, Int32 mode, Int32 dpi, Int32 width, Int32 height)
w SimpleScanA0.A0DLL.StartScanA0() w C:\Users\A.Kordecki\Documents\simplescan\A0Scann\A0DLL.cs:wiersz 21"

Ma ktoś pomysł jak to rozwiązać?

0

A dołączasz tą bibliotekę do swojej aplikacji?

0

Jest w folderze w którym jest plik .exe oraz w samym projekcie w Visual Studio 2017.

0

Nazwy też się zgadzają?

0

No przekopiowałem cały folder Debbug, który na moim komputerze działa na parę innych i na nich wywala ten błąd więc nie upatrywałbym problemu w nazwie.

1

niekoniecznie chodzi o tą konkretną dllkę - może chodzić o jakąś dllkę, której wymaga rzeczona dllka a której nie ma :). Zazwyczaj wystarczy zainstalować vcredist w odpowiedniej wersji.
BTW jest coś takiego jak Dependency Walker, który pokaże Ci czego nie ma

0

Temat do ewentualnego zamknięcia. Problem rozwiązałem wykorzystując DLLImport. Trzeba jednak pamiętać by skompilować program opcją 'Release', a nie 'Debbug'. Póki co wytestowałem program na trzech komputerach i działa. W wersji 'Debbug' nie działa, nie wiem dlaczego, ale już mnie to nie interesuje. Cel osiągnięty.

1 użytkowników online, w tym zalogowanych: 0, gości: 1