---
title: "Lyckas inte med dll:er"
type: "forum-thread"
url: "https://www.webforum.nu/amne/programmering/66122-lyckas-inte-med-dll-er"
topic: "Programmering"
topic_url: "https://www.webforum.nu/amne/programmering"
author: "Alpha II"
published: "2003-01-25T19:11:57.000Z"
updated: "2003-01-31T14:24:54.000Z"
replies: 11
views: 426
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/programmering/66122-lyckas-inte-med-dll-er"
---

# Lyckas inte med dll:er

## #1 — Alpha II, 2003-01-25T19:11Z

Jag försöker att skapa en dll fil med c++ och ett program som använder den i delphi.

Men när jag startar det får jag meddelandet:

"Det går inte att hitta procedurstartadressen muli i DLL-filen CALC.DLL"

Så här ser koden ut till CALC.DLL

```
__declspec(dllexport) float multi(float f1, float f2)
{
	return f1 * f2;
}
```

och så här försöker jag 'ladda' funktionen i delphi:

```
  function multi(f1, f2 : double): double; external 'CALC.DLL';
```

Permalänk: https://www.webforum.nu/p/66122

## #2 — developer, 2003-01-26T14:03Z

Använd [Dependency Walker](http://www.dependencywalker.com) för att kontrollera att funktionen verkligen är exporterad i din dll.

Permalänk: https://www.webforum.nu/p/927600

## #3 — Alpha II, 2003-01-27T12:50Z

Hmmm
vet inte själv, men det verkar som om de är exporterade eller?

I rutan längst ner står det:

"Warning: At least one module has an unresolved import due to a missing export function in a delay-load dependent module."

och i en ruta står detta: (och lite mer värden i en lista):

@add$qff
@sub$qff
@multi$qff
@div$qff
\___CPPdebugHook

Fö har Wf en dum spärr på att bifogade bilder inte får vara större än 600x1200 :o

Permalänk: https://www.webforum.nu/p/928329

## #4 — niko, 2003-01-27T13:06Z

Som jag skrev i din förra tråd så beror ditt problem eventuellt på sk "name mangling" vilket innebär att funktionen inte exporteras som *multi* utan kanske som *\_multi@8* eller nåt liknande ..

För att lösa detta kan du lägga till en DEF-fil i ditt dll-projekt. Läs mer: <http://www.webforum.nu/showthread.php?s=&threadid=62750>

Ett annat sätt är att lägga till ett länkardirektiv i din kod (som jag tyvärr inte kommer ihåg).

*pragma comment( linker, EXPORT:multi* .. ??

Permalänk: https://www.webforum.nu/p/928345

## #5 — developer, 2003-01-27T16:58Z

Ja, det ser absolut ut som funktionsnamnet är manglat. Lägg dit en def-fil som Niko förelår så borde det stå "multi" istället för "@multi$qff".

Permalänk: https://www.webforum.nu/p/928554

## #6 — Alpha II, 2003-01-27T20:37Z

Men hur lägger jag till en def fil till BCC?

Permalänk: https://www.webforum.nu/p/928772

## #7 — Alpha II, 2003-01-27T20:46Z

Skulle fortfarande vilja veta hur man gör det i BCC.
Jag testade att göra vet i MSVC och det verkar fungera.
Programmet laddar men resultatet blir alltid 0. Varför?
Har jag deklarerat något fel i delphi?

Permalänk: https://www.webforum.nu/p/928780

## #8 — developer, 2003-01-27T21:58Z

Om du lyckas anropa funktionen i dll:en från ditt program gjort i delphi till men resultat blir fel är det förmodligen fel calling convention. Det finns olika calling conventions, och med det menas hur argument till funktioner och returvärden hanteras (i vilken ordning de ska läggas på stacken alternativt i CPU-register).

Delphi-programmet, om jag minns rätt, använder \__fastcall som calling convention, och lägger de två första argumenten i register. Din dll antar förmodligen att argumenten ligger på stacken. Det borde finnas något sätt i delphi att berätta vad som gäller, titta i hjälpen på "export", som verkar vara sättet du importar funktioner på.

Läs mer i [Bugslayer 0698](http://www.microsoft.com/msj/0698/bugslayer0698top.htm) eller [MSDN](http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vccelng/htm/msmod_12.asp?frame=true).

Permalänk: https://www.webforum.nu/p/928865

## #9 — Alpha II, 2003-01-28T21:04Z

Jag ändrade funktionen multi från att använda float till int. Och nu fungerar det!!! :D

Är inte double i delphi samma sak som float i c? Hur ska jag deklarera en funktion som använder floats isf i delphi??

Permalänk: https://www.webforum.nu/p/932656

## #10 — jt, 2003-01-29T07:48Z

Använd Single på delphi sidan om du använder float.

Mer hittar du här titta på "Type Conversion":
<http://www.drbob42.com/delphi/headconv.htm>

Oftast brukar man använda StdCall på delphi sidan (ang developers inlägg ovan).
function multi(f1, f2 : single): single; stdcall; external 'CALC.DLL';

Calling conventions 
Directive / Parameter order / Clean-up / Passes parameters in registers?
register / Left-to-right / Routine / Yes
pascal / Left-to-right / Routine / No
cdecl / Right-to-left / Caller / No
stdcall / Right-to-left / Routine / No
safecall/ Right-to-left / Routine / No

Permalänk: https://www.webforum.nu/p/932837

## #11 — Beatbox, 2003-01-30T21:20Z

Är det inte lättare att göra en COM-komponent som implementerar metoderna add, sub, multi och diff och sedan använda den från Delphi ?

Permalänk: https://www.webforum.nu/p/934184

## #12 — Alpha II, 2003-01-31T14:24Z

\*har ingen aning om vad ett COM-komponent är\*

Permalänk: https://www.webforum.nu/p/934663

---

Tråden på webben: https://www.webforum.nu/amne/programmering/66122-lyckas-inte-med-dll-er
