当前位置:首页 » 资源管理 » 如何用dll窗体资源
扩展阅读
钻石王座如何分别正盗版 2024-09-20 00:10:09
冷冻鸡类产品哪里用量大 2024-09-19 23:42:27

如何用dll窗体资源

发布时间: 2022-01-20 07:58:12

A. c# dll 调用窗体

  1. 基本不可能,涉及到启动窗体和线程的问题

  2. 没懂什么意思,你想移动dll做什么

B. 谁知道vc里怎么调用dll里的资源窗体啊

INT_PTR DialogBoxParam(
HINSTANCE hInstance, // handle to mole
LPCTSTR lpTemplateName, // dialog box template
HWND hWndParent, // handle to owner window
DLGPROC lpDialogFunc, // dialog box procere
LPARAM dwInitParam // initialization value
);

C. DLL中如何使用窗体

留意,在Dll中调用Form,必须要有AOwner,即Application。var P: PCHAR): Boolean; stdcall; 你的法度榜样有两个不当:iinput的Application为不法值,因为你没有创 所以,你的函数iinput应当申明为function iinput(AH: THandle; 建(在Application中是主动的,而Dll中却不是);返回值不要用String,最好由主法度榜样传递参数.

D. 如何将窗体做成一个dll

2. 编辑你需要的窗体。(相信这个你也没有问题)
3. 运行,调试。保证你的窗体功能正常了。(别嫌我罗嗦哦^^)
4. 在你的“解决方案”面板上(如果没有,就点Ctrl-Alt-L),找到你的工程(默认是第二行)。点击鼠标右键。
5. 点击“属性”菜单项。
6. 如果是2003,会出来一个对话框。如果是2005,会在编辑代码的那里新出来一页。但是内容都是类似的。
7. 现在找到“输出类型”,下拉框中得值应该是“Windows Application”,现在改成“Class Library”。
8. 点击“确定”(2003)或 Ctrl-S(2005)来保存修改。
9. Ctrl-Shift-B,来重新编译。
10. 好了,你现在在工程文件的bin\Debug 或者 bin\Release中找到编译好的dll了。

现在你需要记住三件事:
1. dll的文件路径。
2. 你编辑的窗体的命名空间(namespace)。
3. 你编辑的窗体的类名。

好了,现在开始引用:
1. 创建好一个新的工程。
2. 在你的“解决方案”面板上(如果没有,就点Ctrl-Alt-L),找到References(默认是第三行),点击右键。
3. 选择“添加引用...”菜单项。
4. 会弹出一个对话框。点击Borwse,找到你刚才写的那个dll文件。打开。
5. 现在,在对话框的列表中找到你刚刚打开的那个dll的名字。点击“选择”按钮。
6. 点击“确定”按钮,关闭对话框。

好了,现在就可以使用你封装的窗体了。

E. 怎么在dll中创建窗口,并调用该窗口

在dll项目中,新加类 ,继承CDialog就行
然后在dll的cpp文件中
这样调用
//加在inclue文件后面
CTest test;
extern "C" __declspec(dllexport) void Show()
{
AFX_MANAGE_STATE(AfxGetStaticMoleState());
if(!test.create)
{
test.Create(IDD_DIALOG1);
test.ShowWindow(SW_SHOWNOACTIVATE);
}
else
{
test.ShowWindow(SW_SHOWNOACTIVATE);
}
}
dll的相关函数中call这个 show()函数就行

F. 如何在dll类库的窗体中引用主程序窗体的值

1 关联form1.textbox1.text的文本改变事件
2 在dll中公布一个方法,当form1.textbox1.text的文本改变后主动调用这个方法

G. c# 怎么把窗体写到dll里去

1. 建立一个新工程。(相信这个你会)
2. 编辑你需要的窗体。(相信这个你也没有问题)
3. 运行,调试。保证你的窗体功能正常了。(别嫌我罗嗦哦^^)
4. 在你的“解决方案”面板上(如果没有,就点Ctrl-Alt-L),找到你的工程(默认是第二行)。点击鼠标右键。
5. 点击“属性”菜单项。
6. 如果是2003,会出来一个对话框。如果是2005,会在编辑代码的那里新出来一页。但是内容都是类似的。
7. 现在找到“输出类型”,下拉框中得值应该是“Windows Application”,现在改成“Class Library”。
8. 点击“确定”(2003)或 Ctrl-S(2005)来保存修改。
9. Ctrl-Shift-B,来重新编译。
10. 好了,你现在在工程文件的bin\Debug 或者 bin\Release中找到编译好的dll了。

现在你需要记住三件事:
1. dll的文件路径。
2. 你编辑的窗体的命名空间(namespace)。
3. 你编辑的窗体的类名。

好了,现在开始引用:
1. 创建好一个新的工程。
2. 在你的“解决方案”面板上(如果没有,就点Ctrl-Alt-L),找到References(默认是第三行),点击右键。
3. 选择“添加引用...”菜单项。
4. 会弹出一个对话框。点击Borwse,找到你刚才写的那个dll文件。打开。
5. 现在,在对话框的列表中找到你刚刚打开的那个dll的名字。点击“选择”按钮。
6. 点击“确定”按钮,关闭对话框。

好了,现在就可以使用你封装的窗体了。

H. VB怎样调用DLL中的资源

一般VB.NET调用DLL可以通过Declare 语句在模块级用于声明对动态链接库 (DLL) 中的外部过程的引用。
Private Declare Sub
myFunc1 Lib "mylib.dll"
(ByVal strName As String)
但是,VB.NET,C#.NET创建的DLL是个类库,不能生成标准的 DLL 文件,不能采用declare ()的方式。应该在解决方案资源管理器下的需要引用的项目的引用栏点击鼠标右键-->添加对这个类库[mylib.dll]的引用即可。
以下为VB.NET调用DLL代码示例:
< DllImport("kcomm.dll", CharSetCharSet:
=CharSet.Ansi, SetlastError:=True)>
Private Shared Function gettxt(ByVal
port As Integer, ByVal wait As
Integer, ByVal _date As Long,
ByVal _time As Long, ByVal
filename As String) As Integer
End Function
根据实际情况更改你的DLL名称、函数名、参数名和类型。
VB.NET调用DLL的只是COM组件,无法作为输出函数的DLL,其实这只是个错误的说法。其实MS非常狡猾,如果你是个VB疯狂发烧友的话,应该早就狂试出这种可以创建输出函数的DLL的方法。
VB编译文件实际上采取了两次编译的方法,首先是调用C2.exe产生*.OBJ文件,然后调用Link.EXE连接。如果在LINK的时候添加EXPORT选项,实际上是可以输出函数的。但是,在VB的工程选项中将这些屏蔽了。而且过分的是:VB在Build完成后会将OBJ文件删除,这样就无法手动通过Link来创建我们需要的DLL了。不过我找到一个比较龌鹾的变通的方法,就是先创建一个Exe工程,在Form_Load事件里面写下面的语句:
Sub Main
If MsgBox("哈哈",
vbOKCancel) = vbOK Then
Shell "link2.exe "
& Command$
End If
End Sub
然后编译为LinkTemp.EXE,接下来将LINK.EXE改名为Link2.exe,将LinkTemp.EXE改名为Link.EXE。这样在VB调用Link.EXE时会弹出对话框,处理就会中断。这时就可以有机会将OBJ文件拷贝出来了。
然后我创建了一个ActiveX DLL工程,在这个工程里面添加一个Mole并创建一个Public函数mathadd:
Public Function mathadd
(ByVal a As Long, ByVal
b As Long) As Long
mathadd = a + b
End Function
编译这个工程,在Link的时候就会中断。然后把创建的Class1.obj、Mole1.obj、Project1.obj备份出来。然后就可以调用Link2.exe连接OBJ到DLL了,我的连接代码是:
Link2.exe "e:\\vbdll\\Class1.obj"
"e:\\vbdll\\Mole1.obj"
"e:\\vbdll\\Project1.obj"
"E:\\Program Files\\Microsoft
Visual Studio\\VB98\\VBAEXE6.LIB"
/ENTRY:__vbaS /EXPORT:mathadd /OUT:
"e:\\vbdll\\ProjectOK.dll"
/BASE:0x11000000 /SUBSYSTEM:
WINDOWS,4.0 /VERS
注意里面的/ENTRY和/EXPORT开关,/EXPORT开关声明了输出函数mathadd。这样就大功告成了,可以被其他语言引入,例如在VB中,只需要:
Private Declare Function mathadd
Lib "e:\\vbdll\\ProjectOK.dll"
(ByVal a As Long, ByVal b As
Long) As Long

I. 如何在DLL中创建窗体

你的EXE是如何加载这个DLL的?
要知道如果是隐式链接,如果不引用DLL中的任何导出函数,则链接器会把该DLL从EXE的导入段中给取出的,最终导致DLL根本不会被加载到进程中。楼主需要用“进程查看器”之类的工具看下你的DLL是不是真的被加载到了EXE的地址空间了。

既然是DLL,那么DLL中最基本的DllMain含义楼主应该清楚吧,就像学习控制台编程,如果连main的含义都是一知半解就糟糕了。
要知道DllMain在 ul_reason_for_call等于DLL_PROCESS_ATTACH时,必须使DllMain函数返回TRUE,EXE才会成功加载该DLL的。

不管是隐式链接,还是显式链接, ul_reason_for_call的值最初都是DLL_PROCESS_ATTACH,我看见楼主的DLL代码根本就不对 ul_reason_for_call的值进行任何检查。起初, ul_reason_for_call的值为DLL_PROCESS_ATTACH,楼主必须应该使DllMain返回(return)TRUE,只有酱子EXE才会真正加载了这个DLL,可while(...)代码使得DllMain这个函数根本没有机会返回TRUE or FALSE;最奇怪的是最后是return messages.wParam。对于while这个语句的调用究竟放哪里好呢?呵呵,有办法的,但解释起来太麻烦了,估计楼主也无法理解。

楼主程序的构建环境是DLL,不能照搬EXE中的代码的,需要灵活运用,灵活应用的基础是要理解代码的含义,光知道有什么函数,有什么数据结构和怎样的调用顺序是远远不够的。

另外,提醒的是在DLL的DllMain有个很重要的hMole参数,这个参数就如同人的脊椎骨,绝对不能无视它的存在。像wincl.hInstance 的值就应该是hMole.

hMole究竟是什么东西,楼主需要有两块基石,一块是“进程地址空间布局”的分支知识,另一块是“PE文件布局”的分支知识。不易学习!

最后,不对ul_reason_for call进行检查也会使事情一团糟。要知道DllMain这个函数并不是只会被EXE调用一次的,当EXE程序对应的进程创建一个新的线程时,该函数也会被调用的,这个时候ul_reason_for_call值为DLL_THREAD_ATTACH,想象一下,如果进程里又创建了个新线程,楼主的DLL又会再创建一个窗口,这个算什么呢?当然,这个窗口在第二次是创建不起来的,因为RegisterClassEx会失败。

J. 如何在dll中调用外部exe程序里的窗口

你是说要怎么写dll?,还是怎么调用你写的dll?怎么写dll:vc++6.0的话,在创建新工程时常用的选择以下任意一个:MFCAppWizard[dll]可以使用MFC框架的动态连接库Win32Dynamic-linkLibrarywindow32位标准动态库然后选择你需要的框架