首先,我知道全局变量是邪恶的:)然而,有合法的情况,为什么我需要使用一个.
我知道在DllMain中可以执行的内容有非常严格的限制(没有LoadLibraries,没有COM初始化等等).
我知道全局变量在DllMain DLL_PROCESS_ATTACH之前初始化.
全局变量初始化时是否有相同的限制?
我发现微软文章:http://msdn.microsoft.com/en-us/library/988ye33t 但是,它没有任何与限制相关的细节.
我还看到了另一个Stackoverflow问题:在DLL中声明的全局变量会发生什么? 这里有一段摘录"在DllMain中有些东西是被禁止的.在构造函数中也可能禁止这些东西."
但是,看起来评论员不确定这些限制是否确实存在.
我希望有关此主题的任何信息.
有时微软会让我感到头晕目眩.当我尝试调试我的项目时,VS会抛出一个消息框,显示以下错误:找不到msvcr90d.dll,重新启动软件可能会解决此错误.但是在结果窗口中,在加载simbols时,会显示以下行:
'GLFW_Window.exe': loaded 'C:\Windows\winsxs\x86_microsoft.vc90.debugcrt_1fc8b3b9a1e18e3b_9.0.30729.1_none_bb1f6aa1308c35eb\msvcr90d.dll', Loaded symbols.
Run Code Online (Sandbox Code Playgroud)
如果我转到此文件夹,DLL实际上存在.此外,我已尝试下载已正常工作但仍然失败的相同项目的先前版本.卸载可以删除这个dll吗?(这不是一台干净的机器,而是我的个人机器).
顺便说一句,如果我手动将这个文件夹的DLL复制到我的项目中,我会得到一个关于make一个清单的奇怪错误.
你们有人能帮助我吗?提前致谢
我正在看一些c ++/c代码,开源的ovaldi项目.我看到它们在发行版中包含pcre.dll,并在代码中调用该库中的函数; 但他们永远不会加载DLL; 它们只包含pcre.h头文件,似乎可以访问这些函数.他们真的只是用静态库构建并在发生意外时分发pcre.dll,还是有办法做到这一点?
您好我想用一些函数创建一个dll.对于初学者,我试图做一些简单的例子来测试.我正在创建一个新的类库,例如下面的代码.当我构建它(没有错误)并创建一个dll文件时,我尝试在我的其他项目中使用它
[DllImport("nllibrary.dll")]
public static extern long Add(long i, long j);
Run Code Online (Sandbox Code Playgroud)
我可以编译它,但当我尝试运行应用程序时,它给我错误"找不到入口点".当我用depends.exe查看这个dll时,它在dll中没有显示任何功能.我的dll有什么问题?
dll的代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace nlLibrary
{
public class nlClass
{
public static long Add(long i, long j)
{
return (i + j*2);
}
}
}
Run Code Online (Sandbox Code Playgroud) 我试图学习如何在C++中使用DLL文件.根据我的研究,当我在我的代码中使用DisplayNotepad()时,这应该打开记事本.我正在尝试编译它,但我收到编译器错误,我知道事实上windows.h定义了ShellExecute,但它说找不到标识符.这是我的代码:
#include "stdafx.h"
#include <windows.h>
#include <iostream>
extern "C"
{
__declspec(dllexport) void DisplayNotepad()
{
ShellExecute(NULL, "open", "c:\\windows\\notepad.exe", NULL,NULL, SW_SHOW);
}
}
Run Code Online (Sandbox Code Playgroud)
我的编译器给出了以下错误:错误C3861:'ShellExecute':找不到标识符.我这样做完全错了吗?感谢您的投入.
我正在维护一个小型.NET应用程序,它在.NET shell中加载GeckoFX webview.它适用于绝大多数计算机,但在一台特定的64位Windows 7计算机上,它会报告以下异常:
Description:
Stopped working
Problem signature:
Problem Event Name: CLR20r3
Problem Signature 01: monoclecatdesktop.exe
Problem Signature 02: 1.0.0.0
Problem Signature 03: 4db67550
Problem Signature 04: Skybound.Gecko
Problem Signature 05: 1.9.1.0
Problem Signature 06: 4db625ff
Problem Signature 07: 54
Problem Signature 08: 87
Problem Signature 09: System.DllNotFoundException
OS Version: 6.1.7600.2.0.0.768.3
Locale ID: 4105
Run Code Online (Sandbox Code Playgroud)
我尝试使用Dependency Walker找到丢失的DLL,但没有任何东西跳出来.我是Windows编程的新手,所以我不知道从哪里开始调试.任何建议表示赞赏!
我正在尝试将第三方dll(即我没有源代码)加载到我的应用程序中.在Windows XP 32位系统上,它加载正常,但在Windows 7系统上无法加载,引用来自GetLastError()的错误#998
我使用dll导出查看器来查看dll的导入和导出符号,并观察到导入表中列出的除3个dll之外的所有dll都来自此第三方供应商.那些没有的是:
kernel32.dll
mingwm10.dll
msvcrt.dll
这是我用来导入的代码:
SetDllDirectory(L"c:\\dlls");
HMODULE tempDLL = LoadLibrary(L"mydll.dll");
DWORD err = GetLastError();
Run Code Online (Sandbox Code Playgroud)
有关如何进行调试的任何提示,好吗?
编辑:感谢大家的回答,这是我到目前为止所发现的:
a)应用工具包包没有证明是有用的(见下文)
b)同事A可以获得加载他的胜利的DLL 7机器和同事B不能,所以它是零星的东西
c)作为管理员运行没有改变任何东西
我正在尝试将JNA集成到JDK 1.3应用程序中.JNA页面有以下主题:
1.4或更高版本的JVM支持(早期的VM可以使用存根NIO支持)
我已经设法通过删除所有java.nio引用将JNA源代码移植到JDK 1.3.我不需要例如java.nio.Buffer.
但是,JNA DLL被编译为使用Java NIO类型并且抱怨:
JNA:加载核心ID时出现问题:java.nio.Buffer
我需要做些什么才能使JNA在JDK 1.3中运行?这"可能与存根NIO支持有关"是什么意思?
我唯一的选择是从C源代码中存根NIO并重新编译DLL吗?因为我根本不擅长C编程,所以我拼命想避免它.
是否有其他方法在Java中调用本机DLL(不是JNI,称为DLL是封闭源和JNI不兼容).
我能够使用Visual Studio IDE执行我的应用程序,但是当我创建一个发布包并将其放在Web服务器上时,它似乎无法找到后面的代码.但是,如果我从根目录复制bin文件夹(具有dll文件)并将其放入"root/reports"目录,一切正常.reports目录包含所有.aspx网页文件.是什么导致了这个问题,我该怎么做才能正确解决这个问题?
在我的项目中,我遇到了这个错误:
错误1命名空间"System.Web"中不存在类型或命名空间名称"UI"(您是否缺少程序集引用?)
所以,基本上我试图添加"system.web"作为我的项目的引用,但我的.NET框架中没有这样的东西.
我该如何安装"system.web"?