我正在使用没有完整功能的MinGW.例如.它没有wchar_t流支持.我已经设法通过编写一组迷你操纵器(下面的代码中的wcusT())来解决这个问题.但是我发现我再次遇到了GetModuleFileNameEx.我无法原生运行GetModuleFileNameEx()此函数已定义<psapi.h>,但似乎没有任何内容可以链接到.这是我的第一个问题:可以/确实/是MinGW能够运行GetModuleFileNameEx吗?我需要做什么?我错过了一些简单的事吗?作为一种解决方法,我试图通过调用它在Windows system32文件夹中的dll(psapi.dll)来间接运行它......但是出了点问题.我还有另一个禁区.我对以下代码的任何评论表示感谢..谢谢
int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nCmdShow)
{ /// typedef and load a dll function
/// ===============================
typedef DWORD (__stdcall *foo)(HANDLE, HMODULE, LPTSTR, DWORD);
LPTSTR ptcPSAPI_DLL = _T("C:\\WINDOWS\\system32\\psapi.dll");
HMODULE hPSAPI_DLL = LoadLibrary(ptcPSAPI_DLL);
if( !hPSAPI_DLL )
{ std::cout<<"ERROR: Failed to load "<<wcusT(ptcPSAPI_DLL)<<std::endl;
return 1;
}
foo GetModFnEx=(foo)GetProcAddress(hPSAPI_DLL,
#ifdef UNICODE
"GetModuleFileNameExW");
#else
"GetModuleFileNameExA");
#endif
/// call the dll library function
/// =============================
HWND hWndNPP = FindWindow(_T("Notepad++"),NULL); // the window calass name
TCHAR ytcMFqFn[FILENAME_MAX]; // …Run Code Online (Sandbox Code Playgroud) 我找到了一个解决方案,但它只适用于你使用.DEF文件(我没有).
我想知道这是否可以在没有.DEF文件的情况下完成.
我的应用程序使用Bass.dll并将其添加到资源中.我想在应用程序启动之前将其解压缩.如何取消它?
对于我的上一个项目,我在delphi应用程序中使用了很多帧,所以我决定创建dll并将它们放在dll中(所有在Delphi中创建)
我已经浏览了很多网站,并提出了有效的代码,但对于该示例,我必须使用运行时包编译这两个应用程序和dll,这意味着我还必须分发bpls.如果不检查构建与运行时包错误即将到来
这是我发现的代码
在exe中
procedure TForm1.Button1Click(Sender: TObject);
type
TGetTheFrame =Function( Owner: TComponent; TheParent: TWinControl ): TFrame; stdcall ;
var
GetTheFrame : TGetTheFrame;
begin
try
GetTheFrame(application,TabSheet1).Free ;
except
end;
frm := GetTheFrame(application,TabSheet1) ;
dllHandle := LoadLibrary('project1.dll') ;
if dllHandle <> 0 then
begin
GetTheFrame := GetProcAddress(dllHandle, 'GetTheFrame') ;
frm := GetTheFrame(application,TabSheet1) //call the function
{ ShowMessage('error function not found') ;
FreeLibrary(dllHandle) ; }
end
else
begin
ShowMessage('xxxx.dll not found / not loaded') ;
end
Run Code Online (Sandbox Code Playgroud)
在DLL中
Function GetTheFrame( Owner: TComponent; …Run Code Online (Sandbox Code Playgroud) 我们正在使用asp.net和C#以及.Net Framework 3.5开发.Net应用程序.
我们在.Net应用程序中使用Windows窗体消息框.此窗体在调试模式下运行良好,但一旦我们发布应用程序,此消息框将无法正常工作.我们引用System.Windows.Form.dll以使用消息框功能.如果我们需要注册此DLL或遵循一些配置步骤以解决此问题,请提供建议.
谢谢先进,Jad
我刚下载了Microsoft Visual C++,并试图运行一个简单的hello世界.但是,当我去调试时,我收到错误"无法启动程序'C:\ Users\Sterling\Documents\Visual Studio2010\Projects\test\Debug\test.dll'"
就是这样.它没有说为什么它不能启动它...它只是说它不能.有没有人经历过这个?知道答案吗?我正在考虑重新安装它,但希望首先找到一个简单的解决方案.我需要一个单独的程序来启动.dll文件吗?一个星期前我刚拿到这台笔记本电脑,所以我可能还没有.这是在Windows 7上.感谢您的帮助.
我正在开发一个32位的Windows应用程序,偶尔会耗尽内存(2GB的虚拟地址空间).当我看看如何使用WinDbg或VMMap分配虚拟内存时,我注意到一个dll映像占用了85 MB的虚拟内存空间.具体来说,84 MB是在".data"部分,并具有"写入时复制"保护.但是,当我查看硬盘时,dll只有81 KB.
dll映像如何在虚拟地址空间中比在磁盘上大1000倍?请注意,我只询问"图像",而不是堆或堆栈,或映射内存,只是图像 - 我意识到堆,堆栈,映射内存等当然会是额外的.
我有一个需要X.dll的C#应用程序(项目A).我已经将生成X.dll的项目添加到了Visual Studio中作为参考.我还将X.dll的发布版本添加到A中的资源文件中作为二进制文件.我告诉项目A 不要将X.dll复制到输出目录.
现在我想要A.exe加载,说"嘿我找不到这个文件",然后查看资源文件并使用Assembly.Load(byte [])获取X.dll.我有代码重新魔术DLL,但这个代码永远不会被调用.
目前我有一个骨头简单的项目,只是试图让它工作.它编译好了.当我运行它时,我在X.dll上得到一个FileNotFoundException.
我有:
[STAThread]
static void Main()
{
AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
}
Run Code Online (Sandbox Code Playgroud)
但*CurrentDomain_AssemblyResolve*中的断点永远不会被击中.我立即得到一个FileNotFoundException.当然有一些我遗失的东西?
我有一个C#winapp.我从C#应用程序调用一个原生.dll文件(由我自己创建),它工作正常.
但是当我将我的应用程序(.exe和.dll文件)复制到另一台机器时,我收到一条错误消息:
无法加载DLL"c:\ dllname.dll":找不到指定的模块.(来自HRESULT的异常:0x8007007E)
这是C#代码:
class IsoMessageHelper
{
public const string ISO8583_DLL = "c:\\Hc8583.dll";
[DllImport(ISO8583_DLL, CallingConvention = CallingConvention.Cdecl)]
public static extern bool InitializationRq(...)
}
Run Code Online (Sandbox Code Playgroud)
我该怎么办?
长时间读者,第一次海报.有一天,我希望在这里回答问题......
所以它类似于:"无法在dll中找到名为[function]的入口点"(c ++到c#类型转换)
但我似乎无法应用相同的解决方案......
基本上,我写了一个新的方法:
在C++项目的头文件中定义为:
extern "C" {
__declspec(dllexport) bool IsDataValid();
}
Run Code Online (Sandbox Code Playgroud)
在C++项目的源文件中定义为:(仅限signiature)
extern bool __cdecl IsDataValid() {
//function stuf......... returns a bool
}
Run Code Online (Sandbox Code Playgroud)
导入C#项目中的表单C#应用程序:
[DllImport("CarChipSDK_C_Sharp.dll", EntryPoint = "IsDataValid")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool IsDataValid();
Run Code Online (Sandbox Code Playgroud)
它是从C#表单.cs文件中的同一个地方调用的:
bool isDataValid = IsDataValid();
Run Code Online (Sandbox Code Playgroud)
它返回一个带有消息的异常:
"无法找到DLL'CarChipSDK_C_Sharp.dll'中命名的入口点'IsDataValid()'.
我在从c ++代码生成的.dll上使用了dumpbin.exe和dependency walker,它显示它具有IsDataValid()入口点.
非常感谢所有帮助......
问题解决了!愚蠢的我,这是我现在公司以前的合作社的代码,结果他正在从bin/release文件夹中读取.dll,我正在构建bin/debug文件夹.应该知道的.真诚的道歉.
dll ×10
c# ×3
c++ ×3
debugging ×2
delphi ×2
windows ×2
.net ×1
asp.net ×1
assemblies ×1
bpl ×1
embed ×1
entry-point ×1
extraction ×1
frame ×1
memory ×1
messagebox ×1
release ×1
resources ×1
runtime ×1
visual-c++ ×1
winapi ×1
winforms ×1