c写dll怎么调用( 二 )


请指点一下是什么原因?解决:这是因为加载dll的路径问题,正确加载方式为:在“解决方案”的“引用”文件上右击鼠标,选择“添加引用”---》在“浏览”选项卡中添加引用(注意:自己定义的dll文件不能在“.NET”选项卡中添加 。)------------------------------------------------------------------------------------------------------------------ c#生成DLL文件,内部函数的问题 用C#编写一组处理XML文档的代码,由于要求生成DLL文件,并由外部的其他工具访问动态库中的文件,但是用Dependency Walker检测我生成的这个DLL文件没有显示任何的函数,以前没做过这方面的东西,求教了 代码如下:using System; using System.IO; using System.Xml; public class Sample { public static void Main() { DeleteArg(); } static void DeleteArg() { XmlDocument doc = new XmlDocument(); doc.Load(@"c:\\data1.xml"); XmlNode root = doc.DocumentElement; XmlNode Node1; XmlNodeList nodeList = doc.SelectSingleNode("/Entity/Columns").ChildNodes; foreach (XmlNode xn in nodeList) { XmlElement xe = (XmlElement)xn; if (xe.GetAttribute("Name") == "SysModuleID") { xe.RemoveAll();//xe.RemoveAttribute("Name");//删除Name属性 } } doc.Save("c:\\data1.xml");//保存这个文档到文件中 } } 以上代码实现删除XML文件中某一节点的功能,如何在生成DLL后能够使用检测工具检测出DeleteArg函数,使用Dependency Walker没检测出该函数是不是以为着这个动态库文件不能被调用.---- 因为.net的程序不是这样把函数放在导出表的,我记得.net做的dll只导出了一个_CorDllMain的方法,所以用Dependency Walker是看不出来的. 如果你想看.net做的dll导出了什么内容,可以用反射查看元数据---- 生成这个DLL库文件,是想要别的工具运行这个动态库文件,实现DELETEARG()这个函数的功能---- 可以的---- 你上面的代码不是生成DLL的,而是 。
4.C中如何调用DLLdll代码:
#include
extern "C"
void _declspec( dllexport )
Msg()
{
MessageBox(NULL,"hello world!","demo",MB_OK);
}
编译完成后把dll命名为fuck.dll,放到 c盘下 。
调用dll的exe的代码:
#include
int main()
{
HMODULE hdll=LoadLibrary("c:\\fuck.dll"); //加载dll
if(hdll!=NULL)
{
FARPROC proc=GetProcAddress(hdll,"Msg");
if(proc!=NULL)
{
//proc();
_asm call proc
}
}
return 0;
}
5.C语言如何调用DLLtypedef __stdcall void (*MYPROC)(char*);
pascal是使用stdcall调用约定的,而c默认是__cdecl
研究半天,搞定了
delphi文件:
library delphi;
procedure Show123(msg:pchar);stdcall;
begin
writeln(msg);
end;
exports Show123;
begin
end.
c调用:
#include <windows.h>
extern "C" typedef void (__stdcall *PShow123)(char* str);
int main()
{
HMODULE hModule = LoadLibrary("delphi.dll"); // 这里换成你自己的dll名
if(!hModule)
return 0;
PShow123 Show123 = (PShow123)GetProcAddress(hModule, "Show123");
if(!Show123)
return 0;
Show123("123123");
FreeLibrary(hModule);
return 0;
}
已经测试成功
6.如何用c/c++编写和调用dll动态链接库假设名为a.dll导出了函数int sum(int a, int b);
应这样调用:
HMODULE hLib = LoadLibrary("a.dll"); //加载a.dll,这里是假设a.dll与程序放在同一目录
typedef int (*funcSum)(int,int); // 定义函数指针
funcSum sum = (funcSum) GetProcAddress(hLib, "sum"); //获取函数地址
int ret = sum(1,2); //调用
FreeLibrary(hLib); //释放
7.c语言如何调用dll动态链接库这是我以前的回答,是个两数加法的例子,看了就明白了
你的dll不必用h头文件,你用的是显式声明导出函数