程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> 關於C# >> c#無法加載DLL“###.dll”,: 找不到指定的模塊

c#無法加載DLL“###.dll”,: 找不到指定的模塊

編輯:關於C#

c# 無法加載DLL“###.dll”,: 找不到指定的模塊。 (異常來自 HRESULT:0x8007007E)的解決辦法

如果是非托管的,就用DllImport,舉例

using System;

using System.Runtime.InteropServices;

class MainApp

[DllImport("Kernel32")] //讀取動態庫文件

public static extern int GetProcAddress(int handle, String funcname);

給你講一下我的經驗:

首先 你在C#中調用的 是C++ 寫的一個動態庫。比如Kernel32.dll 中的 函數;

這個函數用C++寫 有如下要求:

1、 必須為全局函數

2、 函數參數 必須為基本類型,也就是C++ 和C#都有的類型,否則你在public static extern int GetProcAddress(int handle, String funcname);

這裡沒有辦法聲明。 其余的 沒什麼了;

先前用VC寫的程序生成的DLL,C#裡能夠調用麼?

可以的話,在VC裡傳入參數為CString,而C#裡是string,怎麼傳參數呢?

再者就是問,用VC寫的DLL如果是一個導出類,而不是函數接口,C#裡可以直接調用麼?

第一個問題我遇到過, 可用如下方法解決:

VC++ 中為: int Set(char** str,int n); //將 String 改成 char** , C# 中沒有與String對應的類型

C# 中為: int Set(ref string str,int n);

URL:http://www.bianceng.cn/Programming/csharp/201410/45771.htm

VC++ 中的 BOOL 類型對應 C# 中的 System.Int32 類型, 建議改動一下參數類型吧.

第二個問題,生成的DLL裡的函數在一個類裡面,這樣的話在C#裡需要實例化那個類麼?怎麼做

比如說,類solution裡有函數int getch(int a);

我怎麼調用這個getch函數??

建議在C++中另外寫個函數封裝一下, 如:

int Dllgetch(int a)

{

solution st = //實例化 類solution

return st.getch(a);

}

這個 Dllgetch(int a) 就可以提取出來供 C# 調用.

你的方法可以,我也解決了

將CString 改成了LPCTSTR

BOOL在C#中對應的是Boolean

****************************上段摘自jingshuaizh回復提問者的答案,講得很詳細**********************

還有你可以參考這裡:http://blog.csdn.net/jingshuaizh/archive/2009/02/04/3862019.aspx

DLL文件放置位置:

(1)項目文件夾下的../bin/Debug/

(2)系統文件夾下的C:/WINDOWS/system32

如果能確定位置是正確的,那麼就得看看是不是你調用的DLL文件是不是使用到其他DLL文件裡的內容,這點很關鍵,在找不到其他問題的情況下這種情況的可能性高過百分之九十,這只是我遇到的情況,要是有其他情況,可以發來一起討論。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved